2014-11-18 3 views
0

Здесь, я хочу, чтобы избежать использования линии return ""; и вместо того, чтобы вернуть все значения I выхода с System.out.println();Возвращает строку в цикле в то время как

Я попытался с помощью метода StringBuilder, но это не выводит ничего, когда я бегу моя тестовая программа. Я предполагаю, что StringBuilder должен работать по-другому в цикле while, но я не могу найти, как это сделать!

Любые советы или рекомендации будут оценены!

public String toString(){ 
    int topLine = size; 
    int topCurrentLine = size; 
    int bottomLine = 1; 
    int bottomCurrentLine = size; 

    while(topCurrentLine<=size){ 
     topCurrentLine= (size-topLine)+1; 

     if (topCurrentLine<=size){ 
      for (int i = 0; i < (topCurrentLine-1); ++i){ 
       System.out.print("."); 
      } 

      System.out.print(starMinusLine(getSandInLine(topLine), ((2*topLine-1)-getSandInLine(topLine)),false)); 

      for (int i = 0; i < (topCurrentLine-1); ++i){ 
       System.out.print("."); 
      } 
      topLine = topLine -1; 

      System.out.print("\n"); 
     }  
    } 

    while(bottomCurrentLine>1){   
     bottomCurrentLine= (size-bottomLine)+1; 

     for (int i = 0; i < (bottomCurrentLine-1); ++i){ 
      System.out.print("."); 
     } 

     System.out.print(starMinusLine(getSandInLine(bottomLine), ((2*bottomLine-1)-getSandInLine(bottomLine)))); 

     for (int i = 0; i < (bottomCurrentLine-1); ++i){ 
      System.out.print("."); 
     } 
     bottomLine = bottomLine +1; 

     System.out.print("\n");  
    } 

    return "";  
} 

Вот моя попытка с StringBuilder:

public String toString(){ 
    int topLine = size; 
    int topCurrentLine = size; 
    int bottomLine = 1; 
    int bottomCurrentLine = size; 

    StringBuilder y = new StringBuilder(); 

    while(topCurrentLine<=size) { 
     topCurrentLine= (size-topLine)+1; 

     if (topCurrentLine<=size){ 
      for (int i = 0; i < (topCurrentLine-1); ++i){ 
       y.append("."); 
      } 

      y.append(starMinusLine(getSandInLine(topLine), ((2*topLine-1)-getSandInLine(topLine)),false)); 

      for (int i = 0; i < (topCurrentLine-1); ++i){ 
       y.append("."); 
      } 
      topLine = topLine -1; 

      y.append("\n"); 
     } 

    } 

    while(bottomCurrentLine > 1) {  
     bottomCurrentLine= (size-bottomLine)+1; 

     for (int i = 0; i < (bottomCurrentLine-1); ++i){ 
      y.append("."); 
     } 

     y.append(starMinusLine(getSandInLine(bottomLine), ((2*bottomLine-1)-getSandInLine(bottomLine)))); 

     for (int i = 0; i < (bottomCurrentLine-1); ++i){ 
      y.append("."); 
     } 
     bottomLine = bottomLine +1; 

     y.append("\n"); 
    } 

    return y.toString(); 
} 
+6

Нет, 'StringBuilder' не работает по-разному в цикле. Но код, который вы опубликовали, вообще не включает в себя 'StringBuilder', поэтому мы не можем сказать, что вы делаете неправильно. Кроме того, это действительно помогло бы, если бы вы четко форматировали ваш код - его очень трудно прочитать на данный момент. Используйте пробелы, а не вкладки, и в идеале уменьшите свой код до * короткой *, но полной программы, демонстрирующей проблему. Подробнее читайте http://tinyurl.com/stack-hints. –

+0

@JonSkeet Извините за мой код! Я только начинаю, и сложно собрать все мои идеи, не говоря о форматировании! Я поставил свою попытку с StringBuilder в вопросе –

+0

Выглядит хорошо, вероятно, проблема в том, как вы _use_ этот метод. Дикая догадка: ваш предыдущий метод напечатан непосредственно на консоли, теперь метод возвращает то, что было ранее напечатано, но вы все равно должны его распечатать. В коде, вызывающем метод, измените 'toString()' на 'System.out.println (toString())' –

ответ

0

Просто напечатайте toString. Непосредственно перед

return y.toString(); 

добавить

System.out.println(y.toString); 
0

StringBuilder может отлично использоваться в цикле в то время. Вот пример:

public String toString() { 
    int size = 10; 
    int current = 0; 
    StringBuilder sb = new StringBuilder(); 
    sb.append("All values:"); 
    while (current <= size) { 
     sb.append("\ncurrent = " + current); 
     current++; 
    } 

    sb.toString(); 
} 

Строка, возвращаемая этим методом:

All values: 
current = 0 
current = 1 
current = 2 
current = 3 
current = 4 
current = 5 
current = 6 
current = 7 
current = 8 
current = 9 
current = 10 

Я надеюсь, что это ответ на ваш вопрос.

0

создать объект списка и передать его функции toString (список списка). В вашей функции toString (List yourlist) добавьте строки, необходимые для вашего списка. Вам не нужно возвращать список.

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