对于循环未激活

时间:2012-08-28 19:32:32

标签: java for-loop indexing

所以我试图获得一个读取文件的程序,文件的长度为第一行。然后找到文件中最小值和最大值的索引。令人讨厌的是,由于某种原因,我的findMin和findMax方法无法正常工作。好像他们绕过了for循环。我确定我只是犯了一个愚蠢的错误,但我似乎无法确定它。

import java.io.File;
import java.util.Scanner;

public class Driver00 {
    public static int minpos;
    public static int maxpos;
    public static double min;
    public static double max;
    public static int numitems;

    public static void main(String[] args) throws Exception {
        Scanner infile = new Scanner(new File("data.txt"));
        int numitems = infile.nextInt();
        double[] array = new double[numitems];
        for (int k = 0; k < numitems; k++) {
            array[k] = infile.nextDouble();
        }
        infile.close();
        int minPos, maxPos;
        minPos = findMin(array);
        maxPos = findMax(array);
        System.out.println("Minimum value: " + minPos);
        System.out.println("Maximum value: " + maxPos);
    }

    private static int findMin(double[] apple) {
        for (int x = 0; x < numitems; x++)
            // not activating
            if (x == 1) {
                if (apple[x] < apple[x - 1]) {
                    min = apple[x];
                    minpos = x;
                } else {
                    min = apple[x - 1];
                    minpos = x - 1;
                }
            } else {
                if (apple[x] < min) {
                    min = apple[x];
                    minpos = x;
                }
            }
        return minpos;
    }

    private static int findMax(double[] banana) {
        for (int x = 0; x < numitems; x++)
            // not activating
            if (x == 1) {
                if (banana[x] > banana[x - 1]) {
                    max = banana[x];
                    maxpos = x;
                } else {
                    max = banana[x - 1];
                    maxpos = x - 1;
                }
            } else {
                if (banana[x] > max) {
                    max = banana[x];
                    maxpos = x;
                }
            }
        return maxpos;
    }
}

3 个答案:

答案 0 :(得分:2)

public static int numitems;ZERO,这就是为什么你的for循环没有被执行

为什么numitems ZERO?

因为您在int numitems = infile.nextInt();语句处获得的整数将被分配给方法本地numitems变量而不是实例变量。

答案 1 :(得分:1)

这一行:

 int numitems = infile.nextInt();

声明一个新的 local 变量,该变量隐藏静态字段并改为更改。因此,字段numitems永远不会分配任何内容并保持为0 将其更改为

 numitems = infile.nextInt();

答案 2 :(得分:1)

当你声明int numitems = infile.nextInt();你正在写你的全局静态变量。

此外,此代码可能不会因其他原因而起作用。 1:

for(int x = 0; x < numitems; x++)  //not activating
      if (x==1){
            if (apple[x] < apple[x-1]){
                min = apple[x];
                minpos = x;
                }
            else{
                min = apple[x-1];
                minpos = x-1;
                }
            }
         else{
            if (apple[x] < min){
                min = apple[x];
                minpos = x;
                }
            }

这是一个烂摊子,可能会破坏,因为for循环从0开始,而不是1,而min尚未实例化;更容易的是:

if(numitems<=0)
    return 0; //In case there isn't actually a value in your list.
minpos=0;
min=apple[0]
for(int x=1;x<numitems;x++)
{
    if (apple[x] < min)
    {
        min = apple[x];
        minpos = x;
    }

}

对maxpos进行相应的更改。