-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 ZEROなのか?

atステートメントで取得している整数は、インスタンス変数ではなくメソッドローカル変数int numitems = infile.nextInt();に割り当てられるためです。numitems

于 2012-08-28T19:33:24.493 に答える
1

この行:

 int numitems = infile.nextInt();

static フィールドを隠し、代わりに変更される新しいローカル変数を宣言します。したがって、フィールド 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 ループは 1 ではなく 0 から始まり、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 に答える