0

私はJavaを初めて使用し、このサイトのおかげで、リストから最小値を取得する方法を理解しましたが、同じコードを最大値で機能させる方法にまだ苦労しています。私は過去2時間それに取り組んできました。もう一度助けていただければ幸いです

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

public class LargenSmall {
    public static void main(String[] args) throws IOException {
        String filename;        //Numbers file
        double lowest = Double.POSITIVE_INFINITY;//lowest number in list
        double highest; //highest number in list

        //Open the file
        File file = new File("Numbers.txt");
        Scanner inputFile = new Scanner(file);

        //Set lowest to zero


        //Read all the values in Numbers file and find the lowest value
        while (inputFile.hasNext()) {
            //Read the numbers in the file and compare each value to find lowest value
            double number = inputFile.nextDouble();
            if (number < lowest) lowest = number;
        }

        //Set highest to zero
        highest = 0.0;

        //Read all the values in Numbers file and find the highest value
        while (inputFile.hasNext()) {
            //Read the numbers in the file and compare each value to find highest value
            double number = inputFile.nextDouble();
            if (number > highest) highest = number;
        }

        //Close file
        inputFile.close();

        //Print out the lowest value in the list
        System.out.println("The lowest number in your file called, " +
                "Numbers.txt is " + lowest + ".");

        //Print out the highest value in the list
        System.out.println("The highest value in the list is " + highest);
    }
}

私はいくつかのバリエーションを試しましたが、最高値は0.0として戻ってきます

4

3 に答える 3

0

言語を学習するとき(そして学習した後も)、コードのごく一部を使用すると、記述、テスト、および保守が簡単になります。たとえば、数を比較して記憶することは、別のクラスに移動してテストすることができます。

私はあなたのプログラミングエラーを修正するつもりはありませんでした。より良いコードを書くための優れたプログラミング手法についてメモを取りたいと思います。

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

public class LargenSmall {
    BigHolder bigHolder= new BigHolder();
    SmallHolder smallHolder = new SmallHolder();

    public static void main(String[] args) throws IOException {
        new LargenSmall().doSearch(args[0]);

    }
     void doSearch (String filename) throws IOException {
        //Open the file
        File file = new File(filename);
        Scanner inputFile = new Scanner(file);
        iterateAndFetchNumbers(inputFile);
        inputFile.close();
        printResult();

         testNumbers();
     }

    private void iterateAndFetchNumbers(Scanner inputFile) {
        //Read all the values in Numbers file and find the highest value
        while (inputFile.hasNext()) {
            //Read the numbers in the file and compare each value to find highest value
            double number = inputFile.nextDouble();
            smallHolder.accept(number);
            bigHolder.accept(number);
        }
    }

    private void printResult() {
        //Print out the lowest value in the list
        System.out.println("The lowest number in your file called, " +
                "Numbers.txt is " + smallHolder.small + ".");

        //Print out the highest value in the list
        System.out.println("The highest value in the list is " + bigHolder.big);
    }
    //
    private static class SmallHolder {
        double small= Double.POSITIVE_INFINITY;
        public void accept(double newNumber) {
            if ( newNumber < small) {
                small = newNumber ;
            }
        }

    }

    private static class BigHolder {
        double big= 0;
        public void accept(double newNumber) {
            if ( newNumber > big ) {
                big = newNumber ;
            }
        }
    }

    //self test example - should be in junit class
    public void testNumbers() {
        BigHolder b = new BigHolder();

        b.accept(1);
        b.accept(3);
        b.accept(8);
        b.accept(0);
        b.accept(100);
        assert b.big == 0;//junit assert really
    }


}
于 2013-03-04T05:17:18.447 に答える
0

まず、速度を向上させるためにループの前に変数を宣言する必要があります。

double number;
while (inputFile.hasNext())
{
number = inputFile.nextDouble();
if (number > highest) highest = number;
}

次に、最大値を見つける前にファイルの先頭から読み取りを開始していないようです。そのため、このブロックはおそらく実行されていません (既にファイルの最後に到達しているため)。

while (inputFile.hasNext())
{
double number = inputFile.nextDouble();
if (number > highest) highest = number;
}
于 2013-03-04T02:52:22.630 に答える
0

あなたはほとんどそこにいました。2 つの While ループは必要ありません。あなたの場合、2番目のWhileループは機能しません。以下のように、最初の while ループに条件を含めることができます。

    double lowest = Double.POSITIVE_INFINITY;
    double highest = 0d;
    // Read all the values in Numbers file and find the lowest value
    while (inputFile.hasNext()) {
        // Read the numbers in the file and compare each value to find
        // lowest value
        double number = inputFile.nextDouble();
        if (number < lowest)
            lowest = number;
        else if (number > highest)
            highest = number;
    }
于 2013-03-04T02:59:06.347 に答える