Array-elementen kopiëren en wijzigen

Hier is de originele prompt:

Schrijf een lus die nieuwscores instellen op Oldscores verschoven een keer over, met element 0 gekopieerd tot het einde. Ex: als oldscores = {10, 20, 30, 40}, dan nieuwscores = {20, 30, 40, 10}.

Opmerking: deze activiteiten kunnen code met verschillende testwaarden testen. Deze activiteit zal twee tests uitvoeren, de eerste met een array van 4-element (newscores = {10, 20, 30, 40}), de tweede met een array van 1-element (newscores = {199}). Zie ZyBooks gebruiken.

Opmerking: als de ingediende code probeert toegang te krijgen tot een ongeldig arrayelement, zoals nieuwscores [9] voor een array van 4-element, kan de test vreemde resultaten genereren. Of de test kan crashen en rapporteren “PROGRAMMA EINDE NOOIT bereikt”, in welk geval het systeem de testcase niet afdrukt die het gerapporteerde bericht heeft veroorzaakt.

Dit is de code die ik heb:

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;
 }
 }

Dit is mijn uitvoer:

Testen voor Oldscores = {10, 20, 30, 40}

Uw uitgang: 20 30 40 10

✖ Testen voor Oldscores = {199}

Verwachte output: 199

Uw uitvoer: 0

Waarom krijg ik 0 voor mijn tweede uitvoertest?


Antwoord 1, Autoriteit 100%

De for-lus waarin u de waarden van oldscoresnaar newscoreskopieert, wordt nooit uitgevoerd in het geval van SCORES_SIZE == 1, aangezien SCORES_SIZE - 1 == 0en 0 < 0is onmiddellijk onwaar.

Verplaats de regel newScores[SCORES_SIZE - 1] = oldScores[0];buiten de for-lus:

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

Antwoord 2

Ervan uitgaande dat de enige andere controle een array is met lengte één, gebruik dan gewoon deze

if(oldscores.length==1)
{newscores[0]=oldscores[0];
System.out.println(newscores[0]);
}

of nog eenvoudiger,

if(oldscores.length==1)
{
    System.out.println(oldscores[0]);
}

Other episodes