0

アプリでの試行を続行すると、次のオブジェクトで再び行き詰まります。

前回、5 つの整数の配列を受け取る Performer.java オブジェクトについて質問しました。

今回は、Calculations オブジェクトを使用してデータを操作しようとしています。

(間違ったものにラベルを付けている場合は修正してください)

import java.util.List;

public class Calculations {

    public static int performCalcs() {
        Performer getInput = new Performer();

        List<Integer> arrayOne = getInput.getUnit();

        for(int i=0 ; i<=arrayOne.size() ; i++) {
            int sumTotal = 0;

            return sumTotal;
        }
    }
}

私は文字通り立ち往生しています。意味がないことはわかっていますが、私がやろうとしているのは、配列内のすべての数値を合計し、配列内の数値の平均も計算することです。

「i」を正しく実行したと思います。配列をarrayOneに取得できましたが、「i」を実装して、i<=arrayOne.sizeまで加算または乗算を実行する方法がわかりません。

みんなありがとう!

4

9 に答える 9

2
for(int i=0 ; i<=arrayOne.size() ; i++){
    int sumTotal = 0;

    return sumTotal;

}

上記のコードで行っていることは、ループに入ることであり、最初の反復の後、sumTotal (0 になります) を返します。

これはあなたがしたいことです

 int sumTotal = 0; // declare the variable you want to to summerize outside the loop. If you declare it inside the loop it will be garbage collected once the loop finishes and the variable is lost
    for(int i=0 ; i<arrayOne.size() ; i++){
        sumTotal+=arrayOne.get(i); // add the value that is at the current index each iteration

    }
//After the loop, somTotal will have the total added value of the integers in the `List`. Now you can continue from here
于 2013-05-07T08:22:12.223 に答える
1
  • for ループsumTotalの外側に移動する必要があります。それ以外の場合、変数は毎回再初期化されます。sumTotal
  • までループする必要がありますi < arrayOne.size()。IndexOutOfBoundsException が発生します
  • この方法で i 番目の番号を取得します。arrayOne.get(i)
  • 次に、リスト内の値の数でaverage除算して値を計算します。sumTotalarrayOne

コードは次のとおりです。

import java.util.List;

public class Calculations {

    public static int performCalcs() {

        Performer getInput = new Performer();

        List<Integer> arrayOne = getInput.getUnit();

        int sumTotal = 0;

        // Sum the numbers in the array 
        // Repeat until i < arrayOne.size()
        for (int i = 0; i < arrayOne.size(); i++) {
            int num = arrayOne.get(i);
            sumTotal += num;
        }
        // Check that the array is not empty.
        // If it is not, compute the average, o.w. return 0.
        double avg = arrayOne.isEmpty() ? .0 : (sumTotal / arrayOne.size());
        System.out.println("average: " + avg);
        return avg;
    }
}
于 2013-05-07T08:22:01.683 に答える
0

最良の方法は、for-each ループを使用することです。

int sumTotal = 0;

for(Integer val: arrayOne) {
    sumTotal += val.intValue();
}
于 2013-05-07T08:21:34.543 に答える
0

ループ内で sumTotal がどのように返されるかに注意してください。つまり、最初のループで最初の値が返されます。言ってほしい

import java.util.List;


public class Calculations {

public static int performCalcs(){


    Performer getInput = new Performer();

    List<Integer> arrayOne = getInput.getUnit();

    int sumTotal = 0;
    for(int i=0 ; i<arrayOne.size() ; i++){
        sumTotal+=arrayOne.get(i);
    }
    return sumTotal;
}

}

関数に多くの可能性があるJava(およびほとんどのプログラミング言語)での作業を返し、関数が終了して最初に見つかったものは、たとえば、リターンの後に何でも返します。

public double someFunction(int a){
    if (a!=5){
        return a;
    }else{
        return 12;
    }
    return 999; //this return is never used under any circumstances because the function has already returned, good IDEs won't even allow it
}

2 つの戻り値があり、最初に見つかったものを使用します

編集:Maroun Marounが正しく述べているように、forループは

for(int i=0 ; i<arrayOne.size() ; i++){

いいえ

for(int i=0 ; i<=arrayOne.size() ; i++){

これは、Java 配列のインデックスが 0 から始まるため、5 つのエントリを持つ配列のインデックスは 0、1、2、3、4 になるためです。

于 2013-05-07T08:21:55.213 に答える
0

すべての数値を合計するIterableには、これを行う必要があります。

//Declare the variable to hold the total outside the loop.
int total = 0;

//Loop over the integers to sum.
for (Integer i : integers)
{
  //Add the current integer to the total.
  total += i;
}

//The total will now equal the sum of all the integers.
System.out.println("Total: " + total);
System.out.println("Average: " + (total / integers.size()));

コードに欠けていた 2 つの重要な部分は次のとおりです。

  • total 変数はループの外側で宣言する必要があります。それ以外の場合は、反復ごとに単純に再初期化されます。
  • 整数値を一緒に追加する必要があります。
于 2013-05-07T08:22:10.403 に答える
0

私はそれがこのように見えるべきだと思います

public class Calculations {

public static int performCalcs(){

Performer getInput = new Performer();

List<Integer> arrayOne = getInput.getUnit();

for(int i=0 ; i<=arrayOne.size() ; i++){
    int sumTotal += i;
}
    return sumTotal;

}

}

于 2013-05-07T08:22:34.390 に答える
0

sum init と return をループから引き出す必要があります

public static int performCalcs(){


    Performer getInput = new Performer();
    List<Integer> arrayOne = getInput.getUnit();
    int sumTotal = 0;

    for(int i=0 ; i < arrayOne.size(); i++){
        return sumTotal += arrayOne.get(i);
    }

    return sumTotal;
}
于 2013-05-07T08:23:02.127 に答える
0

ここでの問題は、ループ内で「return」を使用していることです。i++ の部分は問題ありません。ループの外側で return を使用します。上記のすべての回答がこれを示しています。

ループで「return」を使用すると、1 回だけ反復されます。

于 2013-05-07T08:23:50.457 に答える
0

int sumTotal = 0;ループ (上) とループ (下) から移動しreturn ...ます。ループ内に配置しsumTotal += arrayOne[I]ます。あなたは一生懸命学んでいますね。

于 2013-05-07T08:24:59.400 に答える