为什么我收到错误“<variable>可能尚未初始化”?</variable>

时间:2014-01-22 00:07:47

标签: java

  

该程序将创建一个包含10个整数的数组。数组中的每个元素都初始化为2.然后将数组的每个元素相加,得到整个数组的总数。我们期待的答案是20.看看您是否可以更正以下代码以生成正确的解决方案。

为什么即使我在sum循环中执行了for,也可能没有初始化错误?

public class WarmUp_01_22_2014{
 public static void main(String[] args){
     int[] myArray = new int[12];
     int total=0;

     for (int i = 0; i < 10; i++){
         myArray[i] = 2;
     }

     for (int i = 0; i < 12; i++){
         int sum = 0;
         int sum += myArray[i];
     }
    System.out.println("The sum of the numbers in the array is " + sum);
 }
}//end class WarmUp_01_22_2014

4 个答案:

答案 0 :(得分:2)

您没有收到该代码的消息;这将无法编译,因为sumprintln不可见。最有可能的是,您在int sum正文中声明了main,然后在循环中声明了另一个int sum。您只想“创建”一次变量,然后只为其赋值。

我怀疑你真的在你的程序中使用total;只需将第二个for循环更改为:

 for (int i = 0; i < 12; i++){
     total += myArray[i]; // the variable "total" was created and set to zero above
 }

答案 1 :(得分:1)

public class WarmUp_01_22_2014{
 public static void main(String[] args){
 int[] myArray = new int[12];
 int total=0;
 int sum = 0;

 for (int i = 0; i < 10; i++){
     myArray[i] = 2;
 }

 for (int i = 0; i < 12; i++){

     sum += myArray[i];
 }
    System.out.println("The sum of the numbers in the array is " + sum);
 }
}//end class WarmUp_01_22_2014

应该有效。将变量声明为更高,以便println()方法可以访问它。

答案 2 :(得分:0)

一些事情:

  • 大小 10个整数的数组意味着您需要编写new int[10]而不是new int[12]
  • 你在for循环的中声明了sum ,因此在for循环之外无法访问它(因为无法保证它甚至会被声明)。
  • 您还通过撰写sum在每个循环中重新声明int sum += myArray[i] - 仅声明一次
  • i < 12i < 10可以更改为i < myArray.length,以使其更加通用。

public class WarmUp_01_22_2014{
    public static void main(String[] args){

        int[] myArray = new int[10]; // size 10, not 12
        int sum = 0; // declare sum here

        for (int i = 0; i < myArray.length; i++){ // < myArray.length
            myArray[i] = 2;
        }

        for (int i = 0; i < myArray.length; i++){ // < myArray.length
            sum += myArray[i]; // add on to the sum, don't declare it here
        }
        System.out.println("The sum of the numbers in the array is " + sum);
    }
}

答案 3 :(得分:0)

如何解决问题

一个简单的调整,例如(i)在进入循环之前引入声明和(ii)在第二次使用变量int时更改值类型(sum)以避免冲突将执行特技:

public class WarmUp_01_22_2014{
public static void main(String[] args) {
    int[] myArray = new int[12];
    int total = 0;

    for (int i = 0; i < 10; i++) {
        myArray[i] = 2;
    }

    //declare varaible here to avoid error
    int sum = 0;
    for (int i = 0; i < 12; i++) {
        //change int sum+=myArray[i] to sum+=myArray[i]
        sum += myArray[i];

    }
    System.out.println("The sum of the numbers in the array is " + sum);

}
}

推理

当编译器编译源代码时,它仍然不知道sum之类的变量确实存在。根据编译器,仅当sum循环被激活时才创建变量for(我们人们知道这是不可避免的,但机器没有)。