Java 为什么我会在说“我”时出错&书信电报;变量>;可能未被初始化";?
这个程序将创建一个10个整数的数组。数组中的每个元素都初始化为2。然后将数组的每个元素相加,得到整个数组的总数。我们期望的答案是20。查看是否可以更正以下代码以生成正确的解决方案 为什么我会得到一个错误,说即使我在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
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循环内部声明了
,因此在for循环外部无法访问它(因为无法保证它会被声明)sum
- 您还在每个循环中重新声明
,只声明一次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);
}
}