2015-02-20 2 views
0

У меня есть класс DieRolling, который мы делаем для AP Computer Science. Предполагается, что этот метод возвращает все числа, которые они свернули «аккуратным» способом. Вот код:Как вернуть строку в этом цикле?

public void printNum() 
{ 
    for (int i=0;i<100;i++) 
    { 
     System.out.println("Roll " + (i+ 1) + ": " + numbers[i]); 
    } 
} 

Мне нужно вернуть цикл целиком, но я не могу понять, как это сделать. Что мне делать? Спасибо!

(Это мой первый пост здесь очень жаль, если это своего рода перепутались)

+1

Что значит «вернуть целое за цикл» (и учитывая, что его метод недействителен, он ничего не возвращает ...)? Каков ожидаемый результат? –

ответ

0

Вы могли бы просто вернуть массив ...

public int[] printNum() { 
    // ... 
    return numbers; 
} 

Если вы хотите форматировать результат, вы можете использовать

public String printNum() { 
    // ... 
    Arrays.toString(numbers); 
} 

Если вы хотите настроить формат, вы можете использовать. ..

public String printNum() { 
    StringBuilder sb = new StringBuilder(128); 
    for (int i=0;i<numbers.length;i++) 
    { 
     System.out.println("Roll " + (i+ 1) + ": " + numbers[i]); 
     if (sb.length() > 0) { 
      sb.append(", "); 
     } 
     sb.append(numbers[i]); 
    }   
    return sb.toString(); 
} 

Или, если вы используете Java 8

public String printNum() { 
    StringJoiner joiner = new StringJoiner(", "); 
    for (int i=0;i<numbers.length;i++) 
    { 
     System.out.println("Roll " + (i+ 1) + ": " + numbers[i]); 
     joiner.add(Integer.toString(numbers[i])); 
    }   
    return sb.toString(); 
} 
0

Вам в первую очередь необходимо изменить тип возвращаемого от пустоты к чему-то разумное. Я предлагаю вам использовать либо массив int, так как вы, по-видимому, знаете, что будете возвращать ровно 100 чисел или ArrayList<Integer>, если это предположение неверно, заполните ваш массив или List в цикле и верните его. AGain, вам нужно будет изменить тип возврата, чтобы он был типом того, что вы решили вернуть.

Поскольку это домашнее задание, детали должны быть предоставлены вам.

0

Вы можете вернуть только один раз из функции. Итак, если вы хотите вернуть все числа, вы можете вернуть массив, если эти числа.

-2
Try this code, the method should be as follow: 

public String printNum() 
{ 
    StringBuilder numbers = new StringBuilder(); 

    for (int i=0;i<100;i++) 
    { 
     numbers.append(i+1); 

     if(i<99) 
     { 
      numbers.append(","); 
     } 

     System.out.println("Roll " + (i+ 1) + " "); 
    } 

    return numbers.toString(); 
1

Вы должны объявить printNum как строку, в результате получится конкатенация всех строк.

public String printNum(final int pToPrint) 
{ 
    StringBuilder result = new StringBuilder(); 

    for(int i = 0; i < pToPrint; i++) 
     result.append("Roll " + (i+ 1) + ": " + numbers[i] + System.lineSeparator()); 

    return result.toString(); 
} 

Тогда вы могли бы назвать, например System.out.println(printNum(100));

+0

Нужно ли обсуждать проблемы конкатенации String в цикле? – MadProgrammer

+0

@MadProgrammer Не совсем, отредактирован. –

+1

:) ............ – MadProgrammer

0

Просто создайте строку переменной String result = ""; и в каждом цикле добавления номера строки. result += "Roll " + (i+ 1) + ": " + numbers[i] + "\n";

Или что-то. Но вы обязательно должны изменить свой тип возврата. Для вышеупомянутого решения это должно быть String вместо void.

+0

Нужно ли обсуждать проблемы конкатенации String в цикле? – MadProgrammer

+0

Это достаточно просто, что это не имеет большого значения. Вы предложили строковые сборщики и истину, которые были бы быстрее, но только 100 номеров. –

+1

Идеальная практика делает совершенным. Вот возможность продемонстрировать хорошие практики неопытным разработчикам, прежде чем они развивают вредные привычки. – MadProgrammer

Смежные вопросы