Utilizzando un ciclo For per popolare un array

Così ho cercato di ottenere una matrice di valori da uno scanner e di riempirli in array. Se l’utente immette 10 valori interi o -1 il ciclo termina e la matrice interrompe il riempimento dei valori. Il seguente è il codice che ho scritto finora per fare questo:

//Input scanner and input controls
Scanner scan = new Scanner(System.in);

System.out.print("Please enter 10 integers \n");

int maxnum = 10;
boolean done = false;
int count = 0;
int[] arrays = new int[maxnum];


//Store values in count array
for (count = 0; (count < maxnum && !done); count++) {
    arrays[count] = scan.nextInt();
    if (arrays[count] == -1) {
        arrays[count] = 0;
        done = true;
    }

}

//print count values
for (count = 0; (count < maxnum); count++) {
    if (arrays[count] != 0) {
        System.out.println(arrays[count]);
    }

}

Quello che ho fatto in modo che -1 non è memorizzato nella matrice è impostato il valore di -1 a 0 e poi dire il mio prossimo ciclo non stampare i valori di 0. So che ci deve essere un modo migliore per fare questo e ho capito che io sono ancora la memorizzazione dei valori pari a zero, ma per la vita di me non riesco a capire come evitare che il ciclo di memorizzazione da zero i valori contenuti nell’array

  • È possibile omettere il fatto boolean utilizzando break; all’interno l’istruzione if all’interno del primo ciclo
  • Int array di avere un valore di default pari a 0…quindi, qualunque cosa gli indici che sono inutilizzati sono ancora a 0 alla fine…
InformationsquelleAutor Bhetzie | 2014-03-07

 

4 Replies
  1. 3

    come sulla memorizzazione di input per un’altra variabile e controllo prima di popolare l’array?

    for (count = 0; (count < maxnum && !done); count++) {
        int testnum = scan.nextInt();
    
        if (testnum  == -1) {
            done = true;
        }
        else {
              arrays[count] = testnum;
        }
    
    }
    • Che in realtà funziona abbastanza bene! Ho scritto qualcosa di quasi identico, prima di oggi, ma ho avuto inclusa un’istruzione di stampa e che, penso, mi ha confuso. Grazie anche per questo!
  2. 3

    Dal momento che il numero di voci può essere inferiore a maxnum, un modo corretto di affrontare il problema potrebbe essere quella di memorizzare il numero effettivo di numeri che l’utente ha inserito, senza contare il -1, e quindi interrompere il secondo ciclo prima che l’ultimo numero è stampato. In questo modo si preoccuperei se -1 nella matrice o non, perché non si sarebbe stampato comunque.

    È già tenere il count, tutto quello che dovete fare è usare nel tuo secondo ciclo:

    for (int i = 0; i < count ; i++) {
        System.out.println(arrays[i]);
    }
    • ohhh ok! Questo ha senso per me. Unico problema che ho ancora con questo codice è che un valore -1 termina il ciclo, ma un valore ancora inserito per questo; tuttavia, come hai detto negozi a 0 per default, quindi ho potuto solo scegliere di non stampare. Grazie anche per questo!
  3. 1

    Tipi di dati primitivi (comprese le matrici) sono sempre assegnato al loro valore di default se un altro incarico non è accaduto prima di fare riferimento. In caso di int, è il valore di default è 0 (stessa con byte, short, char, long), e 0,0 float e double. Oggetto istanza il valore di default è null. Poiché si utilizza un int[] array, tutti gli oggetti contenuti in esso vengono assegnati automaticamente a 0, se non l’hai già fatto.

    Ma dal momento che non si desidera conservare a 0 dell’array, quindi non. Utilizzare un numero diverso, -1 benissimo che, se non avete altre preferenze.

  4. 1

    Questo memorizza solo i numeri che non sono -1. Quando -1 è entrato in un ciclo, il ciclo è terminato.

       import  java.util.Scanner;
    /**
       <P>{@code java TenIntsOrNeg1}</P>
     **/
    public class TenIntsOrNeg1  {
       public static final void main(String[] ignored)  {
         int maxInts = 10;
         int[] ints = new int[maxInts];
    
         Scanner scan = new Scanner(System.in);
    
         System.out.println("Please enter 10 integers, or -1 to quit.");
    
         int idx = 0;
    
         //Keep going for all ten elements...
         while(idx < 10)  {
            System.out.print((idx + 1) + ": ");
    
            int inputNum = scan.nextInt();   //Assumes it *IS* an int
    
            //...unless they enter -1 to terminate.
            if(inputNum == -1)  {  
               //End-condition. Number is not stored
               break;
            }
    
            //Not -1. Store it.
            ints[idx++] = inputNum;
         }
    
         System.out.println("DONE. Printing:");
    
         for(int i = 0; i < ints.length; i++)  {
            System.out.println(i + ": " + ints[i]);
         }
       }
    }

    Di uscita:

    [C:\java_code\]java TenIntsOrNeg1
    Please enter 10 integers, or -1 to quit.
    1: 6
    2: 1
    3: 2
    4: 8
    5: 121
    6: -1
    DONE. Printing:
    0: 6
    1: 1
    2: 2
    3: 8
    4: 121
    5: 0
    6: 0
    7: 0
    8: 0
    9: 0

Lascia un commento