2016-09-27 3 views
1

私はオンラインJavaプログラミングクラス(私は初心者です)を務めており、コードを正しく完了する方法を理解できません。私はすでに含まれていると思っていることを書いてきましたが、コードが完全に機能するようなものは見当たりません。配列内の値を2倍(x * 2)で10未満にするには? (Java)

方向: minValより小さい要素の値を2倍します。例:minVal = 10の場合、dataPoints = {2, 12, 9, 20}{4, 12, 18, 20}になります。

public class StudentScores { 
    public static void main (String [] args) { 
     final int NUM_POINTS = 4; 
     int[] dataPoints = new int[NUM_POINTS]; 
     int minVal = 0; 
     int i = 0; 

     dataPoints[0] = 2; 
     dataPoints[1] = 12; 
     dataPoints[2] = 9; 
     dataPoints[3] = 20; 

     minVal = 10; 
    // DO NOT EDIT ANYTHING ABOVE THIS COMMENT. ABOVE IS THE DEFAULT CODE OF ASSIGNMENT 

     for (i = 0; dataPoints[i] < minVal; ++i) { 
     dataPoints[i] = dataPoints[i] * 2; 
     } 

    // DO NOT EDIT ANYTHING BELOW THIS COMMENT. BELOW IS DEFAULT CODE OF ASSIGNMENT 
     for (i = 0; i < NUM_POINTS; ++i) { 
     System.out.print(dataPoints[i] + " "); 
     } 
     System.out.println(); 

     return; 
    } 
} 

私はオンラインインタラクティブブックを使用していますが、デフォルトのコードを編集したり、変更することはできませんように私は、と台無しではないとされているもののコメントが寄せられています。さらに、この章では配列を扱っています。

私はstackoverflowの書かれていない方法がわからないという意味でこのサイトを初めて使いましたが、私は複数回オンラインでjavaの配列の値を倍にする方法を見てきましたが、私が私を助けるために必要な検索結果を得る。私が手

エラーメッセージは以下のとおりです。

Testing minVal = 10 and dataPoints = {2, 12, 9, 20} 
Expected output: 4 12 18 20 
Your output: 4 12 9 20 

私は、コンパイラは9も10未満であるため、18に倍増する必要があることを登録するには、完全にラインを読むことができるはずと思ったが、それしません。私は9も読まなくてはならないものは何ですか?

+1

ヒント:forループ境界を考え出したら

、単に値を更新する前if-then statementとあなたは条件をチェック続行するかどうかを確認する条件として使用します。それはあなたがしたいことではありません。配列の* all *を常に処理したいが、条件付きで変更する場合のみ**変更が必要** **条件が真である場合。 –

+0

ヒント:あなたに提供されている正しいループをコピーしてみませんか? –

+0

質問を編集して最終回答を含める必要はありません。あなた自身の質問に答えるための適切な礼儀で[この投稿](http://meta.stackexchange.com/a/216722/205949)を見てください。 – nbrooks

答えて

3

コードでは、12 <はfalseと評価され、ループ外になるため、誤った出力が返されます。 Iは、配列のすべての要素を介してループ素子が< MINVALであれば、私は2

+1

配列サイズ 'NUM_POINTS'に定数があり、ループ内で使用するためにクリアされる可能性があります。 – asiew

+1

または単に 'dataPoints.length' ... – fabian

1

for statementの第2のセクションは、終了条件であることによってそれを乗算

for (i = 0; dataPoints[i] < NUM_POINTS ; ++i) { 
     if(dataPoints[i] < minVal) { 
     dataPoints[i] = dataPoints[i] * 2; 
     } 
    } 

:以下のコードを確認し、それ回falseに評価すると、ループは実行を停止します。

この特定の問題では、dataPointsアレイの各値を見て、それを倍にしようとしています。これは、インデックス変数の使用を必要とします。

インデックス変数は、左から右に移動する際に配列内の位置を追跡します。左から、インデックス0で、配列の最後に移動するまで右に移動します。

++iは、ループが実行されるたびにインデックス変数をインクリメントします。これがアレイを通って移動します。

終了条件は、配列内のすべての値を調べたかどうかを確認する必要があります。配列内のすべての値を過ぎると、最後にインデックス変数が指し示しています。終了条件がfalseになるとすぐにループの実行が停止することを覚えておいてください。したがって、i(あなたのインデックス変数)が配列のサイズ(dataPoints.length)より小さい間にコードを実行したいとします。minVal`あなたのループが評価され、 `dataPointsの[i]は、<:

for (i = 0; i < dataPoints.length; ++i) { 
    if (dataPoints[i] < minVal) { 
     dataPoints[i] = dataPoints[i] * 2; 
    } 
} 
+0

ありがとう!あなたの援助と他のものの組み合わせは、私がそれを理解するのを助けました。私が理解できなかったことを私に説明してくれてありがとう、彼らは本当に私を助けてくれました。 –

+0

これは、minValだけではなく、すべての要素を二倍にします。 –

+0

@PriyanshGoel修正のおかげで、私は質問のその部分を逃した。 – nbrooks

0
for (i = 0; i < NUM_POINTS; ++i) { 
    if (dataPoints[i] < minVal) { 
     dataPoints[i] = (dataPoints[i] * 2); 
    } 
} 
関連する問題