Java 为什么我会在说“我”时出错&书信电报;变量>;可能未被初始化";?

Java 为什么我会在说“我”时出错&书信电报;变量>;可能未被初始化";?,java,Java,这个程序将创建一个10个整数的数组。数组中的每个元素都初始化为2。然后将数组的每个元素相加,得到整个数组的总数。我们期望的答案是20。查看是否可以更正以下代码以生成正确的解决方案 为什么我会得到一个错误,说即使我在for循环中初始化了sum也可能没有初始化 public class WarmUp_01_22_2014{ public static void main(String[] args){ int[] myArray = new int[12]; int total

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

为什么我会得到一个错误,说即使我在
for
循环中初始化了
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;
     }

     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
2014年1月22日公开课热身{
公共静态void main(字符串[]args){
int[]myArray=新的int[12];
int-total=0;
对于(int i=0;i<10;i++){
myArray[i]=2;
}
对于(int i=0;i<12;i++){
整数和=0;
int sum+=myArray[i];
}
System.out.println(“数组中的数字之和为”+sum);
}
}//2014年1月22日终级预热

你不能从代码中得到信息;这不会编译,因为
sum
println
不可见。最可能的情况是,在
main
主体中声明了一个
int-sum
,然后在循环中声明了另一个
int-sum
。您只需要“创建”变量一次,然后只为其赋值

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

 for (int i = 0; i < 12; i++){
     total += myArray[i]; // the variable "total" was created and set to zero above
 }
for(int i=0;i<12;i++){
total+=myArray[i];//已创建变量“total”,并将其设置为零
}
公共舱预热01\u 22\u 2014{
公共静态void main(字符串[]args){
int[]myArray=新的int[12];
int-total=0;
整数和=0;
对于(int i=0;i<10;i++){
myArray[i]=2;
}
对于(int i=0;i<12;i++){
sum+=myArray[i];
}
System.out.println(“数组中的数字之和为”+sum);
}
}//2014年1月22日终级预热
应该有用。向上声明变量,以便println()方法可以访问它

有几件事:

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

2014年1月22日公开课热身{
公共静态void main(字符串[]args){
int[]myArray=new int[10];//大小为10,而不是12
int sum=0;//在此处声明sum
对于(inti=0;i
如何解决该问题 一个简单的调整,例如(i)在进入循环之前带上声明,以及(ii)在第二次使用变量
sum
时更改值类型(
int
),以避免冲突,将达到以下目的:

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);

}
}
2014年1月22日公开课热身{
公共静态void main(字符串[]args){
int[]myArray=新的int[12];
int-total=0;
对于(int i=0;i<10;i++){
myArray[i]=2;
}
//在此处声明varaible以避免错误
整数和=0;
对于(int i=0;i<12;i++){
//将int sum+=myArray[i]更改为sum+=myArray[i]
sum+=myArray[i];
}
System.out.println(“数组中的数字之和为”+sum);
}
}
推理
当编译器编译源代码时,它仍然不知道诸如
sum
之类的变量是否存在。根据编译器的说法,变量
sum
只有在
for
循环被激活时才会被创建(我们人类知道这是不可避免的,但机器不会)。

您需要在循环之外声明它。并且从
sum+=myArray[i]之前删除单词
int
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);
    }
}
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);

}
}