"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 一致,它无法知道 bc 的状态,因为它们尚未声明。

如果指令指针与 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。