-1

所以我试图得到一个读取文件的程序,文件的长度作为第一行。然后在文件中找到最小值和最大值的索引。烦人的是,由于某种原因,我的 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;
    }
}
4

3 回答 3

2

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

为什么 numitems 零?

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

于 2012-08-28T19:33:24.493 回答
1

这一行:

 int numitems = infile.nextInt();

声明一个新的局部变量,它隐藏静态字段并改为更改。因此,字段 numitems 从未分配任何内容并保持为 0。
将其更改为

 numitems = infile.nextInt();
于 2012-08-28T19:34:48.017 回答
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 进行了相应的更改。

于 2012-08-28T19:55:58.987 回答