Здесь, я хочу, чтобы избежать использования линии 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();
}
Нет, 'StringBuilder' не работает по-разному в цикле. Но код, который вы опубликовали, вообще не включает в себя 'StringBuilder', поэтому мы не можем сказать, что вы делаете неправильно. Кроме того, это действительно помогло бы, если бы вы четко форматировали ваш код - его очень трудно прочитать на данный момент. Используйте пробелы, а не вкладки, и в идеале уменьшите свой код до * короткой *, но полной программы, демонстрирующей проблему. Подробнее читайте http://tinyurl.com/stack-hints. –
@JonSkeet Извините за мой код! Я только начинаю, и сложно собрать все мои идеи, не говоря о форматировании! Я поставил свою попытку с StringBuilder в вопросе –
Выглядит хорошо, вероятно, проблема в том, как вы _use_ этот метод. Дикая догадка: ваш предыдущий метод напечатан непосредственно на консоли, теперь метод возвращает то, что было ранее напечатано, но вы все равно должны его распечатать. В коде, вызывающем метод, измените 'toString()' на 'System.out.println (toString())' –