2012-04-03 126 views
7

我试图打印这个没有最后一个逗号的循环。我一直在使用谷歌搜索,从我看到的一切似乎过于复杂这样一个小问题。当然,有一个简单的解决方案可以避免打印最后一个逗号。非常感谢有人能帮助我,这让我疯狂!避免打印最后一个逗号

例如它循环1-10 // 1,2,3,4,5,6,7,8,9,10,<不希望这最后一个逗号

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

你可以使用while循环,而不是...或许把这一切变成一个字符串,然后使用长度-1 – radimpe 2012-04-03 10:56:17

+0

的子你可以使用一些书http://stackoverflow.com/questions/ 1076580 /推荐算法练习簿 – kommradHomer 2012-04-03 10:59:10

+0

忘了提及...我必须循环使用,因为老师这么说...绝对不是一个好地方。 – OMGjava 2012-04-03 11:01:26

回答

5

试试这个

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

如果A大于B,那么它仍然会打印A. – 2012-04-03 11:01:45

+0

这将不会编译,因为变量“i”超出了最后一个打印语句的范围。 – Alderath 2012-04-03 11:20:11

+0

谢谢!我做了编辑! – 2012-04-03 11:22:25

11

我可能会用石头砸死了这个答案

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

我不明白为什么,这是我做这件事的方式。它只需要在输出a之前进行范围检查。 – mcfinnigan 2012-04-03 10:57:53

+0

完成后,我添加了范围检查 – 2012-04-03 11:00:41

+0

比我的更好的答案:) – 2012-04-03 11:04:52

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

atob(0,10); 

称为会给输出

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

+0

atob(10,0)将给出10作为输出,但不应该打印任何内容。 – Jochem 2012-04-03 11:14:30

+0

aaaaaggg!你是对的....我改变了! Thanx – Reg 2012-04-03 12:31:19

+0

谢谢你给我这个观点! – OMGjava 2012-04-03 13:17:00

0

尝试:

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

谢谢你给我这个观点! – OMGjava 2012-04-03 13:17:34

1

一般的方法可以是区分第一项和所有其他项。第一次运行,没有逗号印在我之前。之后,我每次都会打印一个逗号。

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

在这种特定的情况下,使用三元运算符(http://en.wikipedia.org/wiki/Ternary_operation),你可以把它写成紧凑:

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

没有三元操作这应该是这样的(而且是更具可读性,这往往是一件好事):

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

(注意+ b是一样的b,所以你可以替换,因为别人做了他们答案)

+0

感谢您给我这个观点! – OMGjava 2012-04-03 13:17:08

0

有了轻微的调整(方法名,变量和空间逗号后):

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

谢谢你给我这个观点! – OMGjava 2012-04-03 13:17:23

4

另一种方式来做到这一点。

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

如果您正在使用一个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

感谢您给我这个观点! – OMGjava 2012-04-03 13:18:04

4

的Java 8:

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

如果要执行交织操作:

的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

使用StringBuilder它。使用基于子串的索引。

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

笨重的解决方案,但嘿 - 它的工作原理。

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

或者,这也适用。

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++; 
    } 
} 
相关问题