2013-11-15 13 views
11

Devo visualizzare tutti i nomi dei server nell'intervallo v10000 fino a v10500.
Di seguito è riportato il codice che ho provato, ma a volte viene visualizzato uno zero.Ciclo attraverso un conteggio Valore stringa

String template = "v10"; 
int count = 0; 

while (count < 501) { 
    String number;   
    if (count < 100) { 
    number = "00" + Integer.toString(count); 
    } else if(count < 10) { 
    number = "0" + Integer.toString(count); 
    } else { 
    number = Integer.toString(count); 
    } 
    String server = template + number; 
    System.out.println(server); 
    count++; 
} 

Ma quando mostro questa soluzione al mio capo, ha appena ride e dice:

posso farlo meglio.

Come posso modificare il mio codice per farlo funzionare correttamente? Sono nuovo di Java.

+6

interruttore tuo if else/se in giro. il 'count <10' è in cima e' count <100' è in basso –

+4

Hai bisogno di un boss più utile. –

+0

verifica sempre per il valore più basso, altrimenti non arriverà mai a quel test (9 è inferiore a 100 e meno di 10 quindi entrerai meno di 100. Ora ho modificato il codice per fare meno di 10 prima. 10 aggiungi 2 zeri, per valori inferiori a 100 aggiungi solo 1 zero in questo modo tutti i valori avranno 3 cifre :-) – AquaAlex

risposta

23

Farei

for(int i = 10000; i <= 10500; i++) 
    System.out.println("v" + i); 
+4

cambia

+2

Questo è quello che intendevo scrivere ... –

14

È una strada molto lunga. Meglio usare String.format()
una soluzione di lavoro per voi sarebbe:

for (int i = 0; i <= 500; i++) { 
    String server = String.format("v10%03d", i); 
    System.out.println(server); 
} 

la stringa di formato è costruita così:
v10 -> il modello Stringa del server
%0 -> gli zeri è necessario
3d -> verranno aggiunte tre cifre

Così il tuo i sarà formattato in questo modo.

+0

L'uso di un String.format è piuttosto costoso e un po 'complicato. A PARER MIO. –

+0

@PeterLawrey: In generale, String.format è una soluzione valida e valida. Ma nel caso della domanda dell'OP, la tua risposta si adatterebbe meglio. –

+0

@dTDesign: nel mio caso, la soluzione di Peter è migliore. Ma terrò in mente il formato String. +1 per quello –

0

Usa String.Format all'interno di un ciclo for:

for (int i = 10000; i <= 10500; ++i) { 
    System.out.println(String.format("v%d", i)); 
} 

Questo conterà attraverso quei numeri interi e anteporre una "v" per ciascuna.

0

Si può fare un for 10.000-10.500 e convertire che int (o qualsiasi tipo numerico si utilizza) per String utilizzando una varietà di soluzioni, per esempio Integer.toString().

Quindi è possibile concatenare "v" e il risultato utilizzando StringBuilder.

5

Basta usare un for ciclo:

for(int i = 10000; i <= 10500; i++) 
    System.out.println("v" + i); 
+2

Solo pochi secondi di ritardo! – Rob

1
 String template = "v"; 
     for(int i=10000;i<=10500;i++){ 
      System.out.println(template+i); 
     } 
8

Ogni altre risposte suggeriscono un approccio migliore a questo problema. Io stesso stavo per suggerire di utilizzare il formato, ma un ciclo a partire da 10000 è troppo bella:

for (int i = 0; i <= 500; i++) { 
    String server = String.format("v10%03d", i); 
    System.out.println(server); 
} 

o semplicemente (e più veloce):

for(int i = 10000; i <= 10500; i++) { 
    System.out.println("v" + i); 
} 

Ma penso che dovremmo anche riparare il bug nel codice di OP:

while (count < 501){ 
    String number; 

    if(count < 100){ 
     number = "00" + Integer.toString(count); 
    }else if(count < 10){ 
     number = "0" + Integer.toString(count); 
    }else{ 
     number = Integer.toString(count); 
    } 
    String server = template + number; 
    System.out.println(server); 
    count++; 
} 

Ti consiglio di utilizzare un ciclo for, invece, ma non è questo il problema. Il problema è l'ordine dei test. se count < 100 è falso, allora anche count < 10 è falso.Non entrerai mai in questo blocco. Cambia l'ordine delle tue dichiarazioni if.

Così il codice fisso:

for (int count = 0; count <= 500; count++){ 
    String number; 

    if(count < 10){ 
     number = "00" + Integer.toString(count); 
    }else if(count < 100){ 
     number = "0" + Integer.toString(count); 
    }else{ 
     number = Integer.toString(count); 
    } 
    String server = template + number; 
    System.out.println(server); 
} 
+0

Mi piace la tua prima soluzione migliore. È pratico, mostra l'intenzione ed è facilmente esteso/riutilizzato. – RobAu

Problemi correlati