Различный характер выходы через петли и струны


Я просто дано как ответ на абсолютный новичок на так, и мне интересно, как это страшно.

Выход на нечетное количество линий:

>
>>>
>>>>>
>>>
>

Выход на четное число строк:

>
>>>
>>>>>
>>>>>
>>>
> 

Код:

int lines = 7;
int half = lines/2;
String carat = ">";
int i;

//better to declare first or does it not matter?         

if(lines%2==0){boolean even = true;}
else{boolean even = false;}

for(i=1;i<=lines;i++){
        System.out.println(carat + "\n");
        if(i==half && even){System.out.println(carat+"\n");}
        if(((i>=half && even) || (i>=half+1)) && i!=lines){
                carat = carat.substring(0,carat.length()-2);
        }else{
                carat = carat + ">>";
        }
}

Этот код выглядит так некрасиво, не учитывая тот факт, что нет метода, который принимает количество строк и что он злоупотребляет целочисленного округления.



1214
11
задан 2 марта 2011 в 04:03 Источник Поделиться
Комментарии
2 ответа


лучше объявить первый или это не важно?

Нет. В эти дни большинство людей считают, переменные должны быть объявлены как можно позже, прямо там, где они используются.


Этот код выглядит так некрасиво.

Это. Немного пробелов там помогли бы много. Что легче читать:

// This:
if(i==half && even){System.out.println(carat+"\n");}

// Or this:
if (i == half && even) {
System.out.println(carat+"\n");
}


что он злоупотребляет целочисленного округления.

Там нет насилия, и это не округление. Усечение целочисленной арифметики является определенной частью языка. Не стесняйтесь использовать его. В данном случае, это именно то, что вы хотите.

Если бы я писал это, я бы сделал:

printCarats(int numLines) {    
for (int line = 0; line < numLines; line++) {
// Mirror vertically across center line.
int halfLine = line;
if (line > numLines / 2) halfLine = numLines - line - 1;

int numCarats = 1 + halfLine * 2;
for (int i = 0; i < numCarats; i++) {
System.out.print(">");
}
System.out.println();
}
}

16
ответ дан 2 марта 2011 в 07:03 Источник Поделиться

    if(lines%2==0){boolean even = true;}     
else{boolean even = false;}

Это работает для вас? Во-первых, похоже, что это делает даже переменной только в блоке решения. Вы не сможете ссылаться на это дальше в коде, если вы объявляете его в скобки.

Кроме того, вы можете, возможно, избавиться от если/остальное только с помощью логики тест для определения даже переменной:

boolean even = (lines%2 == 0); //parens for clarity

10
ответ дан 2 марта 2011 в 12:03 Источник Поделиться