0

だから私は付加価値のピラミッドを作ろうとしています。元。1行目は(5)、2行目は(6,7)、3行目は(12,10,7)です。目標は、最初の行の最大値と、次の行の最大の接続子値を追加することです。したがって、この場合、5 + 7 + 10を追加すると、結果は22になります。3行目で12を使用できない理由は、上記の番号の子を使用する必要があるためです(各親は2人の子供)。

私のアプローチは、Scannerを使用してint値を行ごとに配列にロードし、前の行の最も高い子値の位置にインデックスを付けて、それを現在の合計に追加することです。これが私がこれまでに持っているコードです...

//データファイル内...

5

6 7

12 10 7

//それで全部です。

    public static void main(String[] args) {
    Scanner scanner = null;
    try {
        scanner = new Scanner(new File("/users/joe/desktop/data.txt"));
    } catch (FileNotFoundException e) {
        System.out.println("File not found.");
        e.printStackTrace();

    } //reads the file

    int[] a = new int[100]; //establishes new array with a max size of 100
    int i = 0; //placeholder for array position
    int result = 0;
    int total = 0;

    while(scanner.hasNextLine()){ //loops through line
        a[i++] = scanner.nextInt(); //adds int to array
        if(i == 0){ //does this belong here?
            result = a[0];
        }
        else{
            if(a[i-1] >= a[i+1]){
                result = a[i-1];
            }
            else if(a[i-1] <= a[i+1]){
                result = a[i+1];
            }
        }
    }
    total =  total + result;
    scanner.close();

    System.out.print(Arrays.toString(a));
    System.out.println("\n" + total);


    }
    }

現在、これは次のように出力されます:[5,6,7,12,10,7,0,0,0,0,0、...最大100ポジション]

5

スキャナーに1行を読み取らせ、それを配列にロードしてループさせ、次の行の配列から最大の子値を保存するにはどうすればよいですか?

4

1 に答える 1

0

そのコードを実行すると、すべての数値を読み取った後、NoSuchElementExceptionが発生します。これは、ファイルの次の行を常にチェックしているが、次の整数を読み込んでいるために発生します。

コードには非常に多くの論理的な欠陥があるため、それらすべてについてコメントするのは困難です。これがあなたが取り組むことができるいくつかです:

ループの外側で、合計+結果を1回だけ追加します。合計が正しく計算されるように、ループ内に移動する必要があります

結果を誤って計算します。少なくとも、最後の行の最大数の位置を示す変数が必要です。また、i-1とi+ 1を比較しています...最後の行に到達すると、iの下のアイテムではなく、iのいずれかの側のアイテムを比較するため、これは機能しません。

変数を三角形の2D配列に読み込むことをお勧めします。これを行うには、行ごとに別のスキャナーを作成します。各行を新しいスキャナーに読み込みます。nextInt()のポーリング。これにより、arr[row][pos]とarr[row-1][pos]の子となるarr[row][pos+1]を比較できます。

ファイルを2D配列に読み込み、配列からintを出力して、ファイルの内容と同じように表示できるようになったら、それでも問題が解決しない場合は、戻ってきてください。サポートを提供します。

于 2012-07-04T02:47:07.977 に答える