1. ホーム
  2. java

[解決済み】配列要素のコピーと修正

2022-02-11 17:37:43

質問

以下は、プロンプトの原文です。

newScoresをoldScoresを左に一回シフトしたものに設定し、要素0を最後にコピーするループを書きなさい。例:oldScores = {10, 20, 30, 40}の場合、newScores = {20, 30, 40, 10}とする。

注意:これらのアクティビティは、異なるテスト値でコードをテストすることができます。このアクティビティは2つのテストを実行します。1つ目は4要素の配列(newScores = {10、20、30、40})で、2つ目は1要素の配列(newScores = {199})で実行します。zyBooksの使い方を参照してください。

また、注意:提出されたコードが無効な配列要素にアクセスしようとした場合、例えば4要素の配列に対して newScores[9] のように、テストは奇妙な結果を生成する可能性があります。あるいは、テストがクラッシュして "Program end never reached" と報告されるかもしれません。この場合、報告されたメッセージの原因となったテストケースはシステムには表示されません。

これは、私が持っているコードです。

public class StudentScores {
  public static void main (String [] args) {
  final int SCORES_SIZE = 4;
  int[] oldScores = new int[SCORES_SIZE];
  int[] newScores = new int[SCORES_SIZE];
  int i = 0;

  oldScores[0] = 10;
  oldScores[1] = 20;
  oldScores[2] = 30;
  oldScores[3] = 40;

  for (i = 0; i < SCORES_SIZE - 1; i++) {
     newScores[3] = oldScores[0];
     newScores[i] = oldScores[i + 1]; 
  }

  for (i = 0; i < SCORES_SIZE; ++i) {
     System.out.print(newScores[i] + " ");
  }
  System.out.println();

  return;
 }
 }

これが私の出力です。

oldScores = {10, 20, 30, 40}をテストする。

あなたの出力 20 30 40 10

✖ oldScores = {199} のテスト。

期待される出力 199

あなたの出力 0

2回目の出力テストで0が表示されるのはなぜですか?

解決方法は?

の値をコピーしているforループは、そのループの中にある。 oldscores から newscores の場合、決して実行されません。 SCORES_SIZE == 1 というのは SCORES_SIZE - 1 == 0 を、そして 0 < 0 は即座に偽となります。

を移動します。 newScores[SCORES_SIZE - 1] = oldScores[0]; の行は、for ループの外側にあります。

for (i = 0; i < SCORES_SIZE - 1; i++) {
  newScores[i] = oldScores[i + 1]; 
}
newScores[SCORES_SIZE - 1] = oldScores[0];