我该如何解决这个简单的范围错误?

时间:2014-01-11 01:50:59

标签: java arrays loops scope

在范围界定方面存在一些问题。我正在尝试使用循环编写程序,该循环从键盘获取表示考试成绩(0到100之间)的10个值,并输出所有输入值的最小值,最大值和平均值。我的程序不能接受小于0或大于100的值。

import java.util.Scanner; 
import java.util.Arrays;

public class ExamBookClient
{
   public static void main( String[] args)
   {
       Scanner scan = new Scanner(System.in);

       int MAX = 100;
       int MIN = 0;
       int[] grades = new int[10];


       System.out.println("Please enter the grades into the gradebook.");
       if(scan.hasNextInt())
       {
         for (int i = 0; i < grades.length; i++)
          {
             if( x>MIN && x<MAX)
             {
             int x = scan.nextInt();
             grades[i] = x;
          }
       }
    }  
       System.out.print("The grades are " + grades.length);
   }
 } 

我的编译器错误是我无法修复范围错误:

    ExamBookClient.java:21: error: cannot find symbol
             if( x>MIN && x<MAX)
                 ^
  symbol:   variable x
  location: class ExamBookClient
ExamBookClient.java:21: error: cannot find symbol
             if( x>MIN && x<MAX)
                          ^

3 个答案:

答案 0 :(得分:2)

要解决范围界定问题,请将x的声明/初始化移至首次使用之前的某个位置:

int x = scan.nextInt();
if( x>MIN && x<MAX ) {
    grades[i] = x;
}

您的代码存在一些问题:

  • if(scan.hasNextInt())只会在第一次阅读int之前执行;您应该更改代码以在循环的每次迭代中检查下一个int
  • 您需要为当前minmaxtotal
  • 添加变量
  • 您不需要将值存储在数组中,因为这三个标量足以计算程序所需的所有三个输出。

答案 1 :(得分:1)

将x移到if。

之上
if(scan.hasNextInt())
   {
     for (int i = 0; i < grades.length; i++)
      {
         int x = scan.nextInt();
         if( x>MIN && x<MAX)
         {

         grades[i] = x;
      }
   }

答案 2 :(得分:1)

您已在x子句中声明if。因此,当您的计划到达if时,x将无法定义。试试这个:

int x = scan.nextInt(); // OUTSIDE THE IF
if( x > MIN && x < MAX)
{        
    grades[i] = x;
}