当前位置: 首页 > 知识库问答 >
问题:

int变量未初始化

申屠涛
2023-03-14
private int getBirthdayYear(){
        Random r1 = new Random();
        int x = r1.nextInt(1000);
        int year = 1000+ x;
        return birthdayYear;
      }
          private String getBirthday(){
        int year = getBirthdayYear();
        Random r2 = new Random();
        int y = r2.nextInt(11);
        String monthStr;
        int month = 1 + y;
          switch (month) {
            case 1:  monthStr = "January";
                     break;
            case 2:  monthStr = "February";
                     break;
            case 3:  monthStr = "March";
                     break;
            case 4:  monthStr = "April";
                     break;
            case 5:  monthStr = "May";
                     break;
            case 6:  monthStr = "June";
                     break;
            case 7:  monthStr = "July";
                     break;
            case 8:  monthStr = "August";
                     break;
            case 9:  monthStr = "September";
                     break;
            case 10: monthStr = "October";
                     break;
            case 11: monthStr = "November";
                     break;
            case 12: monthStr = "December";
                     break;
            default: monthStr = "Invalid";
                     break;
        }


        Random r3 = new Random();
        **int day;// day variable declared as int**
        if(month == 1||month == 3||month == 5||month == 7||month == 8||month == 10||month == 12){
        int z1 = r3.nextInt(30);
        day = 1 + z1;
        }
        else if(month == 2||month == 4||month == 6||month == 9||month == 11){
          int z2 = r3.nextInt(29);
        day = 1 + z2;
        }
        else if(month == 2 & year%4 ==0){
        int z3 = r3.nextInt(28);
        day = 1 + z3;
        }
        else if(month == 2 & year%4 != 0){
        int z4 = r3.nextInt(27);
        day = 1 + z4;
        }

        **birthday = monthStr + " " + day + "th " + year;// error here. day variable is not initialized
        return birthday;**
          }

共有1个答案

景高杰
2023-03-14

在Java中,不能使用可能未初始化的变量。“uninitialized”表示变量可能未设置为任何值。如果编译器不能证明变量始终是初始化的,就会产生一个错误。

int a;

// a is uninitialized

if(r.nextInt(10) < 2)
   a = 5;

// a has an 80% chance of still being uninitialized

System.out.println(a); // error: a might not be initialized.  

在您的情况下:

int day;
// day is uninitialized
if(month == 1||month == 3||...){
    int z1 = r3.nextInt(30);
    day = 1 + z1;
}
else if(month == 2||month == 4||month == 6||month == 9||month == 11){
    int z2 = r3.nextInt(29);
    day = 1 + z2;
}
else if(month == 2 & year%4 ==0){
    int z3 = r3.nextInt(28);
    day = 1 + z3;
}
else if(month == 2 & year%4 != 0){
    int z4 = r3.nextInt(27);
    day = 1 + z4;
}
// if the month wasn't between 1 and 12, day is still uninitialized

编译器不够聪明,无法检测月份始终介于1和12之间。修复方法是确保day始终设置为某个值,即使month不在该范围内。

这样做的一种方法:

int day;
// day is uninitialized
if(month == 1||month == 3||...){
    int z1 = r3.nextInt(30);
    day = 1 + z1;
}
else if(month == 2||month == 4||month == 6||month == 9||month == 11){
    int z2 = r3.nextInt(29);
    day = 1 + z2;
}
else if(month == 2 & year%4 ==0){
    int z3 = r3.nextInt(28);
    day = 1 + z3;
}
else if(month == 2 & year%4 != 0){
    int z4 = r3.nextInt(27);
    day = 1 + z4;
}
// THIS PART IS NEW
else
    day = -1; // this line will never actually run

现在编译器可以知道,无论发生什么,day总是设置为在该语句结束之后的某个值。

请注意,day=-1;从未实际运行。只有这样,编译器才能证明day总是有一个值。

 类似资料:
  • 我在这里看到过类似的问题,如果这看起来像是重复的,我很抱歉,但是类似问题的答案对我没有帮助。所以我有一个方法,它是类的一部分。这里是: 错误表明变量min可能尚未初始化。我不明白这怎么可能是真的。我觉得变量不可能不在for循环之外初始化。请帮忙。谢谢

  • 本文向大家介绍tensorflow 初始化未初始化的变量实例,包括了tensorflow 初始化未初始化的变量实例的使用技巧和注意事项,需要的朋友参考一下 今日在Stack Overflow上看到一个问如何只初始化未初始化的变量,有人提供了一个函数,特地粘贴过来共大家品鉴: 通过tf.global_variables()返回一个全局变量的列表global_vars, 然后以python列表解析式的

  • 问题内容: 我的Java程序中出现以下错误: Java变量未初始化错误…错误:变量nam和r未初始化位置类子级 但是并且已经初始化,但是我仍然遇到相同的错误。 问题答案: 不要获取 默认值 ,应在使用它们之前对其进行初始化,并使用main中的默认值进行初始化,这样就可以了。 顺便说一句,考虑为您的类和变量命名是有意义的。

  • 问题内容: 我有一个方法创建一个,另一个方法更改字符串 我的编译器说它“可能尚未初始化”。 有人可以解释吗? 问题答案: 变量可能尚未初始化 在内部定义方法时,必须在其中初始化程序的每个变量中必须先使用一个值的地方。 同样重要的是,您的代码将永远无法正常运行,因为Java中的字符串是不可变的,因此您无法编辑字符串,因此应更改方法。 我将您的代码更改为类似的内容,但是我认为您的编辑方法应该做另一件事

  • 所以我已经在结果中声明了相关字符串的值,但是它仍然说我的变量“result”可能还没有初始化。 我正在尝试实现与此类似的输出。任何人都可以帮我吗?谢谢!

  • 我正在研究Euler Problem 9项目,其中说明: 毕达哥拉斯三元组是由三个自然数组成的集合 例如,3^2 4^2=9 16=25=52。 确实存在一个毕达哥拉斯三重态,其bc=1000。查找产品abc。 以下是我到目前为止所做的: 当我运行代码时,会出现以下错误: 注意:我的每个变量(a、b和c)都有不同的行号。 我想当我声明a、b和c为整数时,如果不赋值,默认值是0。 即使不是这样,在我