2012-04-03 37 views
7

Tôi đang cố gắng in vòng lặp này mà không có dấu phẩy cuối cùng. Tôi đã được Googling về điều này và từ những gì tôi đã nhìn thấy tất cả mọi thứ có vẻ overcomplex cho một vấn đề nhỏ như vậy. Chắc chắn có một giải pháp dễ dàng để tránh in dấu phẩy cuối cùng. Nhiều người đánh giá cao nếu ai đó có thể giúp tôi, điều này khiến tôi phát điên!Tránh in dấu phẩy cuối cùng

Ví dụ nó vòng từ 1-10 // 1,2,3,4,5,6,7,8,9,10, < không muốn dấu phẩy cuối cùng này

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

Bạn có thể sử dụng một vòng lặp khi thay ... hoặc có lẽ đặt tất cả vào một chuỗi duy nhất và sau đó sử dụng chuỗi con của chiều dài -1 – radimpe

+0

Bạn có thể sử dụng một số cuốn sách http://stackoverflow.com/questions/ 1076580/recommend-an-algorithm-exercise-book – kommradHomer

+0

Quên đề cập đến ... tôi phải lặp lại bằng cách sử dụng vì giáo viên đã nói như vậy ... chắc chắn không ở một vị trí tốt. – OMGjava

Trả lời

5

Hãy thử điều này

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

nếu A lớn hơn B thì nó vẫn in A. –

+0

Điều này sẽ không biên dịch vì biến 'i' nằm ngoài phạm vi trong câu lệnh in cuối cùng. – Alderath

+0

cảm ơn! Tôi đã chỉnh sửa! –

11

tôi có thể bị ném đá đến chết cho câu trả lời này

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

Tôi không hiểu tại sao, đó là cách tôi làm. Nó chỉ cần một kiểm tra phạm vi cho một trước khi xuất ra một. – mcfinnigan

+0

được thực hiện, tôi đã thêm phạm vi kiểm tra –

+0

câu trả lời hay hơn tôi :) –

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

Khi gọi với

atob(0,10); 

Sẽ cung cấp cho sản lượng

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

+0

atob (10,0) sẽ cho 10 là đầu ra, nhưng không in được gì. – Jochem

+0

aaaaaggg! Bạn đúng .... Tôi đã thay đổi nó! Thanx – Reg

+0

Cảm ơn bạn đã cho tôi quan điểm này! – OMGjava

0

Hãy thử:

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

Cảm ơn bạn đã cho tôi quan điểm về điều này! – OMGjava

1

Cách tiếp cận chung có thể là phân biệt giữa mục đầu tiên và tất cả các mục khác. Lần chạy đầu tiên, không có dấu phẩy nào được in TRƯỚC KHI i. Sau đó, một dấu phẩy được in trước i, mọi lúc.

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

Trong trường hợp cụ thể này, sử dụng các nhà điều hành ternary (http://en.wikipedia.org/wiki/Ternary_operation), bạn có thể viết nó như là nhỏ gọn như:

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

Nếu không có hoạt động ternary , điều này sẽ giống như thế này (và có thể đọc được nhiều hơn, mà thường là một điều tốt):

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(","); 
    } 
} 

(lưu ý + b là giống như b, vì vậy bạn có thể thay thế đó, như những người khác đã làm trong họ câu trả lời)

+0

Cảm ơn bạn đã cho tôi quan điểm về điều này! – OMGjava

0

Với các điều chỉnh nhẹ (tên phương pháp, các biến, và không gian sau dấu phẩy):

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

Cảm ơn bạn đã cho tôi quan điểm về điều này! – OMGjava

4

Tuy nhiên, một cách khác để làm điều này.

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

nếu bạn đang sử dụng một 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

Cảm ơn bạn đã cho tôi quan điểm về điều này! – OMGjava

4

Java 8:

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

Nếu bạn muốn thực hiện hành động đan xen:

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

Sử dụng StringBuilder cho nó. sử dụng chỉ mục dựa trên chuỗi con.

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

giải pháp phiền phức, nhưng hey - nó hoạt động.

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

Ngoài ra, điều này cũng hoạt động.

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++; 
    } 
} 
Các vấn đề liên quan