"Cannot resolve symbol" 我声明的变量?
"Cannot resolve symbol" of my declared variable?
我的问题的解决方案可能非常明显,但我还没有找到。如果您完全想知道这段代码的作用,假设是取 10 个用户输入的数字,将它们相加,然后输出平均值。到目前为止,我唯一的错误是 double average = sum / 10;
它没有读取变量 sum
,我完全不知道为什么。
import java.io.*;
class Average
{
public static void main (String args[]) throws IOException
{
// declare some variables
int count = 0;
String inInput;
// declare array constructer
double[] userInput = new double[9];
// declare a reader
InputStreamReader inStream = new InputStreamReader(System.in);
BufferedReader reader = new BufferedReader(inStream);
// print out the array
while (count >= 9)
{
if (count != 10)
{
System.out.println ("Please enter a value");
}
else
{
System.out.println ("Please enter another value");
}
inInput = reader.readLine();
double inInputDouble = Double.parseDouble(inInput);
userInput[count] = inInputDouble;
double sum = sum + userInput[count];
count++;
}
double average = sum / 10;
System.out.println ("The average of all the numbers you have entered is" + average);
}
}
如上所述,sum 必须在 for 循环之前声明。
范围就像程序中的括号,
int a ..
{
int b ...
{
int c ...
}
}
如果评估的指令与 a
一致,它无法知道 b
和 c
的状态,因为它们尚未声明。
如果指令指针与 int c
求值,它知道所有变量,因为它已经进入第三级范围。但由于 c
是在第 3 层声明的,在指令指针从括号外移出后,如果您没有将 c
的值保存在上层变量中,该值将丢失,因为 c
已清理,无法访问(外部范围)。这就像你想从另一个文件中读取一个变量一样......你不能,范围就像便利贴,从外部开始并附加新的更小的便利贴,在使用 iot 之后,它们会被删除
scope: class definitions > method definitions > block definitions(for, while, if)
visible everywhere - visible under the method > visible in the block only
after it exits method all (eg: for (int i;..)
is gone i is not visible outer the for / brackets
另一个错误:
new double[9];
?
你说它应该需要 10 个整数......
在初始化时你不计算 0 ... 0 用于基于 0 的索引(a[0],a[1],a[2]
需要 new int[3]
)...将其设置为新的双 [10];
int count 始终为 0,因此它永远不会进入 while(count >= 9) 并且在调用 sum 时根本不会定义它,将其更改为 while(count <= 9)
您在 while
循环块中声明变量 sum
。一旦该块完成,变量就会超出范围并且不再被定义。
将您的 double sum
声明放在 while
之前,您应该没问题。
sum 的范围是它在其中声明的块,其中是 while 循环的块。
在 while 循环外声明 sum。
一遍又一遍地重新声明这个变量没有太大意义,因为你想对所有数字求和。
看看这个问题:
Scope of variable declared inside a for loop
变量只能在声明的范围内使用。您的 sum
变量在 while
主体内声明,因此只能在该范围内使用。
将 sum
的声明移到 while 循环之外,如下所示:
double sum = 0;
// print out the array
while (count >= 9)
{
...
sum = sum + userInput[count];
...
}
...
您可能还想将 count >= 9
更改为 count < 9
以避免 ArrayIndexOutOfBounds。
我的问题的解决方案可能非常明显,但我还没有找到。如果您完全想知道这段代码的作用,假设是取 10 个用户输入的数字,将它们相加,然后输出平均值。到目前为止,我唯一的错误是 double average = sum / 10;
它没有读取变量 sum
,我完全不知道为什么。
import java.io.*;
class Average
{
public static void main (String args[]) throws IOException
{
// declare some variables
int count = 0;
String inInput;
// declare array constructer
double[] userInput = new double[9];
// declare a reader
InputStreamReader inStream = new InputStreamReader(System.in);
BufferedReader reader = new BufferedReader(inStream);
// print out the array
while (count >= 9)
{
if (count != 10)
{
System.out.println ("Please enter a value");
}
else
{
System.out.println ("Please enter another value");
}
inInput = reader.readLine();
double inInputDouble = Double.parseDouble(inInput);
userInput[count] = inInputDouble;
double sum = sum + userInput[count];
count++;
}
double average = sum / 10;
System.out.println ("The average of all the numbers you have entered is" + average);
}
}
如上所述,sum 必须在 for 循环之前声明。 范围就像程序中的括号,
int a ..
{
int b ...
{
int c ...
}
}
如果评估的指令与 a
一致,它无法知道 b
和 c
的状态,因为它们尚未声明。
如果指令指针与 int c
求值,它知道所有变量,因为它已经进入第三级范围。但由于 c
是在第 3 层声明的,在指令指针从括号外移出后,如果您没有将 c
的值保存在上层变量中,该值将丢失,因为 c
已清理,无法访问(外部范围)。这就像你想从另一个文件中读取一个变量一样......你不能,范围就像便利贴,从外部开始并附加新的更小的便利贴,在使用 iot 之后,它们会被删除
scope: class definitions > method definitions > block definitions(for, while, if)
visible everywhere - visible under the method > visible in the block only
after it exits method all (eg: for (int i;..)
is gone i is not visible outer the for / brackets
另一个错误:
new double[9];
?
你说它应该需要 10 个整数......
在初始化时你不计算 0 ... 0 用于基于 0 的索引(a[0],a[1],a[2]
需要 new int[3]
)...将其设置为新的双 [10];
int count 始终为 0,因此它永远不会进入 while(count >= 9) 并且在调用 sum 时根本不会定义它,将其更改为 while(count <= 9)
您在 while
循环块中声明变量 sum
。一旦该块完成,变量就会超出范围并且不再被定义。
将您的 double sum
声明放在 while
之前,您应该没问题。
sum 的范围是它在其中声明的块,其中是 while 循环的块。 在 while 循环外声明 sum。
一遍又一遍地重新声明这个变量没有太大意义,因为你想对所有数字求和。
看看这个问题: Scope of variable declared inside a for loop
变量只能在声明的范围内使用。您的 sum
变量在 while
主体内声明,因此只能在该范围内使用。
将 sum
的声明移到 while 循环之外,如下所示:
double sum = 0;
// print out the array
while (count >= 9)
{
...
sum = sum + userInput[count];
...
}
...
您可能还想将 count >= 9
更改为 count < 9
以避免 ArrayIndexOutOfBounds。