Rimozione il valore 0 da un array ordinato?
Domanda
Mi chiedevo se ci fosse un modo per rimuovere il valore "0" di default che provo quando corro il seguente codice:
Scanner scan = new Scanner(System.in);
int [] x = new int[4];
for ( int i = 1; i < x.length; i++ )
{
System.out.println( "Enter number " + i + ": ");
x[i] = scan.nextInt();
}
Arrays.sort(x);
System.out.println(Arrays.toString(x));
}
L'uscita è il seguente
[0, i[1], i[2], i[3]]
Naturalmente, tutti i valori di matrice qui sono in realtà i numeri inseriti nella console. Il codice funziona. Si ordina con successo tutti i numeri nell'ordine corretto, tuttavia, c'è sempre questo brutto 0.
Non sto cercando di rimuovere tutti i 0 di (voglio l'utente sia in grado di entrare 0 e lo hanno mostra aggiornamenti) -? -Non solo che non voglio il default 0. Tutte le idee
Soluzione
Quando si alloca un array di dimensione 4, stai assegnando quattro interi: i [0], i [1], i [2], e [3]. Poiché Java è abbastanza gentile, pone tutti e quattro di questi per 0. Quindi quello che stai vedendo in uscita è [i[0],i[1],i[2],i[3]]
(in modo ordinato). L'ordinamento non aggiunge lo 0, era già lì. Se si desidera solo 3 numeri, allora si dovrebbe assegnare un int [3], piuttosto che un int [4]. E poi, per andare insieme a quella, quando si chiede il numero 1, riporlo in I [0]. Il cambiamento più semplice per farlo sarebbe quello di cambiare semplicemente la linea superiore a
int [] x = new int[3];
e la linea in seguito al
x[i-1] = scan.nextInt();
La modifica suggerita da altre risposte è il più comune, uno, però. La maggior parte dei programmatori avrebbero vado da 0 a 2 e poi l'uscita i + 1 quando si parla per l'utente.
Altri suggerimenti
indici di array in Java sono basati su 0, non 1-based. Così l'iterazione iniziare da 0 anziché da 1 e si dovrebbe essere buono:
for ( int i = 0; i < x.length; i++ )
for (int i = 0 ; i
Il seguente codice dovrebbe funzionare:
Scanner scan = new Scanner(System.in);
int[] x = new int[3];
for (int i = 0; i < x.length; i++)
{
System.out.println( "Enter number " + i + ": ");
x[i] = scan.nextInt();
}
Arrays.sort(x);
System.out.println(Arrays.toString(x));
Il problema era, come altri hanno fatto notare, che il vostro int dovrei iniziare a 0, non 1.