2016-03-14 32 views
2

這裏是原始提示:消除最後一個逗號與太空

「寫一個for循環打印陣列ho​​urlyTemp的所有NUM_VALS元件用逗號和空間分離的元件實施例:如果hourlyTemp = {90,92,94 ,95},print: 90,92,94,95

請注意,最後一個元素後面沒有逗號,空格或換行符。

這裏是我的代碼:

import java.util.Scanner; 

public class PrintWithComma { 
    public static void main (String [] args) { 
     final int NUM_VALS = 4; 
     int[] hourlyTemp = new int[NUM_VALS]; 
     int i = 0; 

     hourlyTemp[0] = 90; 
     hourlyTemp[1] = 92; 
     hourlyTemp[2] = 94; 
     hourlyTemp[3] = 95; 

     for (i = 0; i < NUM_VALS; i++) { 
      System.out.print(hourlyTemp[i] + ", "); 
     } 

     System.out.println(""); 

     return; 
    } 
} 

我的輸出爲 「90,92,94,95,」 當它應該是 「90,92,94,95」

我如何消除最後的逗號和空格?

+0

添加一個條件,檢查它是否是最後一次迭代。 – Atri

回答

1

檢查是否達到最後一次迭代。如果不打印逗號,否則不要。

替換:

for (i = 0; i < NUM_VALS; i++) { 
    System.out.print(hourlyTemp[i] + ", "); 
} 

有了:

for (i = 0; i < NUM_VALS; i++) { 
    if (i == (NUM_VALS - 1)) System.out.print(hourlyTemp[i]); 
    else System.out.print(hourlyTemp[i] + ", "); 
} 
+0

完美!謝謝! –

0

分手了價值印刷和逗號空間打印成兩個單獨的語句,不打印的逗號空間的最後一個值:

System.out.print(hourlyTemp[i]); 
if (i + 1 < NUM_VALS) { 
    System.out.print(", "); 
} 

另外,打印外循環的第一個值,然後先打印逗號空間內循環:

System.out.print(hourlyTemp[0]); 
for (int i = 1; i < NUM_VALS; ++i) { 
    System.out.print(", " + hourlyTemp[i]); 
} 
0

檢查,如果i已經達到了最後一次迭代。

for (i = 0; i < NUM_VALS; i++) { 
     if (i == (NUM_VALS - 1)) 
      System.out.print(hourlyTemp[i]); 
     else 
      System.out.print(hourlyTemp[i] + ", "); 
    } 
0

舉個例子,你可以把一個條件,只是打印一個空白,一旦你到達終點。

for(int i=0; i<10; i++) { 
    System.out.print(i + (i < 10-1 ? ", " : "")); 
} 
4

通常你不知道預先打印的值的數量(但在你的情況下是4)。所以打印分離器before而不是after更容易。無if S:

String sep=""; 
for (i = 0; i < NUM_VALS; i++) { 
    System.out.print(sep + hourlyTemp[i]); 
    sep=", "; 
    } 

竅門就是 - 第一次沒有什麼可以分開,因此分離器是空的,後來 - ", ";

適合註冊,節省分支預測的工作。計算if (i == last_value)也不是0成本。

+1

這就是我通常這樣做的方式。 –

+1

我很喜歡這個。 – Marv

+0

不錯的方法,但不是這種浪費,每次重新分配'sep'? – Cyoce

2
String delimiter = ", "; 

第一種方法是使用java.util.StringJoiner。此外,您可以指定結果字符串的前綴和後綴(例如,(delimiter, "[", "]"))。

StringJoiner joiner = new StringJoiner(delimiter); 
for (int i : hourlyTemp) joiner.add(Integer.toString(i)); 
System.out.println(joiner.toString()); 

第二種方法是使用Stream API。

Arrays.stream(hourlyTemp) 
      .map(i -> i.toString()) 
      .collect(Collectors.joining(delimiter)); 

或者最無聊的辦法:

for (i = 0; i < NUM_VALS;) 
    System.out.print(hourlyTemp[i] + (i++ != (NUM_VALS - 1) ? delimiter : ""));