2012-04-03 17 views
7

Estoy intentando imprimir este ciclo sin la última coma. He estado buscando en Google sobre esto y, por lo que he visto, todo parece demasiado complejo para un problema tan pequeño. Seguramente hay una solución fácil para evitar imprimir la última coma. Muy apreciado si alguien pudiera ayudarme, ¡esto me está volviendo loco!Evita imprimir la última coma

Por ejemplo se realiza un bucle del 1-10 // 1,2,3,4,5,6,7,8,9,10, < no desea que esta última coma

public static void atob(int a,int b) 
      { 
       for(int i = a; i <= + b; i++) 
       { 
         System.out.print(i + ","); 
       } 
      } 
+1

Se puede usar un bucle Mientras que en vez ... o tal vez poner todo en una sola cadena y luego usar subcadena de la longitud -1 – radimpe

+0

Se podría utilizar un poco de libro http://stackoverflow.com/questions/ 1076580/recommend-an-algorithms-exercise-book – kommradHomer

+0

Olvidé mencionar ... tengo que usar bucle porque el profesor lo dijo ... definitivamente no en un buen lugar. – OMGjava

Respuesta

5

probar este

public static void atob(int a,int b) 
{ 
    for(int i = a; i < b; i++) 
    { 
      System.out.print(i + ","); 
    } 
    System.out.print(b); 
} 
+0

si A es mayor que B, entonces sigue imprimiendo A. –

+0

Esto no se compilará ya que la variable 'i' está fuera del alcance en la última declaración de impresión. – Alderath

+0

gracias! ¡Hice la edición! –

11

Puede que me lapidada hasta la muerte por esta respuesta

public static void atob(int a,int b) { 
    if(a<=b) { 
    System.out.println(a); 
     for(int i = a+1;i<=b;i++) { 
     System.out.println(","+i); 
     } 
    } 
    } 
} 
+0

No veo por qué, así es como lo haría. Solo necesita una verificación de rango antes de enviar a. – mcfinnigan

+0

hecho, agregué el rango de verificación –

+0

mejor respuesta que la mía :) –

3
public static void atob(int a, int b) { 
    if (a < b) { 
     System.out.print(a); 
     while (a < b) { 
      a++; 
      System.out.print("," + a); 
     } 
    } 
} 

Cuando se llama con

atob(0,10); 

daría la salida

0,1,2,3,4,5,6,7,8,9,10

+0

atob (10,0) dará 10 como salida, pero no debe imprimir nada. – Jochem

+0

aaaaaggg! Tienes razón ... ¡Lo cambié! Gracias – Reg

+0

¡Gracias por darme una perspectiva de esto! – OMGjava

0

Probar:

public static void atob(int a, int b) { 
    if (b < a) { 
     final int temp = a; 
     a = b; 
     b = temp; 
    } 
    System.out.print(a++); 

    for (int i = a; i < b ; i ++) { 
     System.out.print("," + i); 
    } 
} 
+0

¡Gracias por darme una perspectiva de esto! – OMGjava

1

Un enfoque general podría ser hacer una distinción entre el primer elemento y todos los demás. La primera ejecución, no se imprime una coma ANTES de i. Después de eso, una coma se imprime antes que yo, todas las veces.

public static void atob(int a,int b) { 
    boolean first = true; 
    for(int i = a; i <= + b; i++) { 
     if (first == false) System.out.print(","); 
     System.out.print(i); 
     first = false; 
    } 
} 

En este caso específico, utilizando el operador ternario (http://en.wikipedia.org/wiki/Ternary_operation), podría escribir lo más compacto:

public static void atob(int a,int b) { 
    for(int i = a; i <= + b; i++) { 
     System.out.print(i + (i < b ? "," : "")); 
    } 
} 

Sin operación ternaria , esto se parece a esto (y es más fácil de leer, que a menudo es una buena cosa):

public static void atob(int a,int b) { 
    for(int i = a; i <= + b; i++) { 
     System.out.print(i); 
     if (i < b) System.out.print(","); 
    } 
} 

(tenga en cuenta que a + b es lo mismo que b, por lo que podría reemplazar a que, como otros han hecho en su respuestas)

+0

¡Gracias por darme una perspectiva de esto! – OMGjava

0

Con pequeños ajustes (nombre del método, las variables y el espacio después de la coma):

public static void printSequence(int start, int end) { 
    if (end < start) { 
    return; // or however you want to handle this case 
    } 
    if (end == start) { 
    System.out.print(start); 
    return; 
    } 
    StringBuilder sequence = new StringBuilder(); 
    for (int i = start; i <= end; i++) { 
    sequence.append(i).append(", "); 
    } 
    // now simply print the sequence without the last ", " 
    System.out.print(sequence.substring(0, sequence.length() - 2)); 
} 
+0

¡Gracias por darme una perspectiva de esto! – OMGjava

4

Sin embargo, otra manera de hacer esto.

String sep = ""; 
for(int i = a; i <= b; i++) { 
    System.out.print(sep + i); 
    sep = ","; 
} 

si está utilizando un StringBuilder

StringBuilder sb = new StringBuilder(); 
for(int i = a; i <= b; i++) 
    sb.append(i).append(','); 
System.out.println(sb.subString(0, sb.length()-1)); 
+0

¡Gracias por darme una perspectiva de esto! – OMGjava

4

Java 8:

IntStream.rangeClosed(a, b) 
     .collect(Collectors.joining(",")); 

Si desea llevar a cabo acciones de entrelazado:

Java 8:

IntStream.rangeClosed(a, b) 
     .peek(System.out::print) 
     .limit(b - a) // [a:(b-1)] 
     .forEach(i -> System.out.print(",")); 

Java 9: ​​

IntStream.rangeClosed(a, b) 
     .peek(System.out::print) 
     .takeWhile(i -> i < b) // [a:(b-1)] 
     .forEach(i -> System.out.print(",")); 
0

Uso StringBuilder para ello. utilizar índice basado en subcadenas

public class arraySort { 
    public static void main(String[] args) { 
     int a[] = { 2, 7, 5, 6, 9, 8, 4, 3, 1 }; 
     for (int i = 0; i < a.length; i++) { 
      for (int j = i + 1; j < a.length; j++) { 
       if (a[i] < a[j]) { 
        int temp; 
        temp = a[i]; 
        a[i] = a[j]; 
        a[j] = temp; 
       } 
      } 
     } 

     System.out.print("Descending order:{"); 
     StringBuilder br = new StringBuilder(); 
     for (int i = 0; i < a.length; i++) { 
      br.append(a[i] + ","); 
     } 
     System.out.print(br.substring(0, br.length()-1)); 
     System.out.println("}"); 

    } 

} 
0
public static void atob (int a,int b){ 
for(int i = a; i <= b; i++) 
     { 
      System.out.print(i); 
      if(i<b){ 
       System.out.print(","); 
      } 
     } 
} 
0

solución Clunky, pero bueno - que funciona.

public static void atob(int a, int b){ 
int count = 1; 
    for(int i = a; i <= + b; i++) { 
     System.out.print(i); 
     if(count!=((b + 1) - a)) { 
     System.out.print(", "); 
     count++; 
     } 
    } 
} 

Alternativamente, esto también funciona.

public static void atob(int a, int b){ 
int count = 0; 
    for(int i = a; i <= + b; i++) { 
    if(count > 0){ 
     System.out.print(", "); 
    } 
     System.out.print(i); 
     count++; 
    } 
} 
Cuestiones relacionadas