0

宿題の一環として、次のコードがあります。

  ArrayList <Integer> marks = new ArrayList();

  Collections.addAll(marks, (Integer.parseInt(markInput.getText())));

  private void analyzeButtonActionPerformed(java.awt.event.ActionEvent evt) 
  {
      analyzeTextArea.setText("Number at level R:" + calculateLevelR());
  }

  private int calculateLevelR() {
      int sum = 0;
      for (Integer mark: marks) {
          if(mark < 50)
              sum += mark;
          sum = marks.size();
      }
      return sum;
  }

ユーザーが一連の成績を入力すると、「レベル R」(50 未満) の成績の量を計算して表示しようとしていますが、上記のコードは正しく機能せず、代わりに配列全体のサイズを計算します。

「レベルR」の成績だけを計算するにはどうすればよいですか?

4

3 に答える 3

2

他の回答はすでに正確な問題を指摘しています.あなたのコメントを見ると、コードスニペットがよりよく説明できるかもしれません. 下記参照

  private int calculateLevelR() {
      int sum = 0;
      for (Integer mark: marks) {
          if(mark < 50)
              sum += mark;
          sum = marks.size(); // If mark is less than 50 add mark to sum else sum = size of arrayList
      }
      return sum;
  }

必要なものは次のとおりです。

  private int calculateLevelR() {
      int sum = 0;
      for (Integer mark: marks) {
          if(mark < 50)
              sum++; // If mark is less than 50 increment sum
      }
      return sum; // finally when check all marks return sum, this sum will represent total number of marks less than 50.
  }
于 2012-05-29T04:38:16.003 に答える
1

たぶん、ループのこのsum = marks.size();直後にこれがあるからです。sum += mark;

さらに、成績は値ではなく金額を合計する必要があるため++sum、実際の点数ではなく、点数が 50 点未満の場合は 1 だけ追加する必要があります (例: )。

于 2012-05-29T04:07:57.007 に答える
1

これは、 sum += mark; の呼び出し後に sum を marks.size() に設定しているためです。som=marks.size() 行を削除するだけです。

于 2012-05-29T04:07:59.653 に答える