我声明的变量的“无法解析符号”?

vwkv1x7d  于 2021-06-30  发布在  Java
关注(0)|答案(5)|浏览(334)

这个问题在这里已经有答案了

在for循环中声明的变量范围(5个答案)
5年前关门了。
我的问题的解决办法可能是显而易见的,但我还没有找到。如果您想知道这段代码应该做些什么,那么假设取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);
    }
}
2nbm6dog

2nbm6dog1#

您正在声明您的变量 sum 内部 while 循环块。一旦该块完成,变量就超出范围,不再定义。
把你的 double sum 会前声明 while 你应该没事的。

wa7juj8i

wa7juj8i2#

变量只能在声明它的范围内使用。你的 sum 变量在 while 因此只能在该范围内使用。
移动声明 sum while循环的外部,如下所示:

double sum = 0;

// print out the array
while (count >= 9)
{
    ...
    sum = sum + userInput[count];
    ...
}

...

你可能也想改变 count >= 9count < 9 以避免数组索引超出边界。

ijxebb2r

ijxebb2r3#

sum的作用域是它声明的块,其中是while循环的块。在while循环外声明sum。
一次又一次地重新声明这个变量没有太大意义,因为你想把所有的数字加起来。
看看这个问题:在for循环中声明的变量的作用域

ulydmbyx

ulydmbyx4#

int count总是0,所以它从不进入while(count>=9),当sum被调用时,它根本不会被定义,请更改while(count<=9)

emeijp43

emeijp435#

如上所述,sum必须在for循环之前声明。作用域就像程序中的括号,

int a ..
{
   int b ...
   {
       int c ...
   }
}

如果所计算的指令与 a ,它无法知道 b 以及 c ,因为它们还没有申报。
如果指令指针以int计算行 c ,它知道所有的变量,因为它已经进入了第三个范围级别。但是自从 c 如果未保存 c 在上层变量中,值会丢失,因为 c 已清除,并且无法访问(外部范围)。就像你想从另一个文件中读取一个变量。。。你不能,范围就像便签,从外部开始,附加新的较小的便签,在物联网工作后,它们会被删除

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

相关问题