基本的'For Loop'编译错误

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

标签: java loops for-loop

import java.util.Scanner; // Scanner tool is imported.
public class Sales   
{
    public static void main (String[] args) // Main.
    {

        Scanner scan = new Scanner(System.in);   // Scanner object is instantiated.

        String[] name = new String[5]; // First array for names is created.
        double[] sales = new double[5]; // Second array for sales is created.

        for (int i=0; i<5; i++) {    // For loop to ask each question 5 times.
            System.out.println ("What is the name of the person?");
            name[i] = scan.nextLine();
            System.out.println ("How much did he/she sell?");
             sales[i] = scan.nextDouble();
        }

        for (int j=0; j<5; j++) {    // loop to print the salesperson and amount of sales.
           System.out.println (name[j] + " sold " + sales[j]);aa
        }


        int sum = 0;   // The sum is calculated using a for loop.
        for (double k : sales){
            sum+=k;
        }

        double avg = sum / 5;  // The average is calculated.
        System.out.println ("The average sales is: " + avg);

        if (sales[i] >= avg){  // whether or not the person sold greater than average.
            System.out.println (name[i] + " sold more than the average sales.");
        }
    }
}

编译错误:

Sales.java:36: error: cannot find symbol
         if (sales[i] >= avg){  // Indicates whether or not the person sold greater than average.
                   ^   symbol:   variable i   location: class Sales Sales.java:37: error: cannot find symbol
         System.out.println (name[i] + " sold more than the average sales.");
                                  ^   symbol:   variable i   location: class Sales 2 errors

我尝试将'i'改为'j'....但这也不起作用。有任何想法吗?感谢。

5 个答案:

答案 0 :(得分:4)

基本上发生的事情是你正在使用一个for循环,它在代码的开头声明了一个int i。但是,当完成此for循环时,int i现在已经消失。

for (int i=0; i<5; i++) {
    System.out.println ("What is the name of the person?");
} // <-- After this your int i is gone

那个int,因为它在for循环中声明,只持续该循环的生命周期。稍后在您的代码中,您尝试使用不再存在的相同int i。这与将j更改为j的原因完全相同。在您到达问题区域时,您声明int [{1}}的循环也已完成。

尝试在问题区域添加另一个for循环,如下所示:

for (int i = 0; i < 5; i++) {
    if (sales[i] >= avg){  // whether or not the person sold greater than average.
        System.out.println (name[i] + " sold more than the average sales.");
    }
}

这将为您提供范围内的变量i,并且可以按照您尝试的方式使用。

另外,作为旁注,您可能希望更改for循环以使用sales.size而不是显式数字。如果稍后更改数组的大小,这将使您更容易。

 for (int i = 0; i < sales.length; i++) {  }

答案 1 :(得分:3)

在这行代码的末尾有两个外来字符需要删除。

System.out.println (name[j] + " sold " + sales[j]);aa

它也抱怨i,因为在该特定行的范围内没有具有该名称的变量。您之前声明的i仅在您第一个for循环的持续时间内存在。

一个简单的解决方法是将if语句包装在另一个循环中。你可能还需要一个,因为你试图找出谁卖得超过平均水平:

for (int i = 0; i < sales.length; i++){
    if (sales[i] >= avg){  // whether or not the person sold greater than average.
        System.out.println (name[i] + " sold more than the average sales.");
    }
}

编辑:这与您的问题无关,但在您的循环的后续运行中将跳过您对此人姓名的提示。您可能希望在调用scan.nextLine()后添加另一个nextDouble()以使用尾随的换行符。

答案 2 :(得分:1)

当然它找不到它,因为你在for循环之外引用变量“i”。由for(int i = 0; ...)定义的变量仅对for循环可见,而不在其外部。

答案 3 :(得分:0)

System.out.println (name[j] + " sold " + sales[j]);aa尝试从代码中删除aa。

答案 4 :(得分:0)

System.out.println (name[j] + " sold " + sales[j]);aa

我认为aa需要删除