2016-03-14 1 views
2

Вот оригинальный запрос:.Исключая Последней Запятую & Space

«Написать цикл для печати всех NUM_VALS элементов массива hourlyTemp Отдельных элементы с запятой и пробелом Ex:. Если hourlyTemp = {90, 92, 94 , 95}, печать: 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=", "; 
    } 

Trick является - первый раз, нет ничего, чтобы отделить таким образом сепаратор пуст, позже - ", ";

Устанавливается в регистр, сохраняет работу предсказателя ветвления. Расчет 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 : "")); 
Смежные вопросы