2016-07-26 2 views
1

Я новичок в Java и придерживался этого задания, хотя я его как-то закончил, но хочу сделать это без инструкции if-else.Алфавит, в том числе астерикс -Java

for(int i=0; i<numRows; i++) 
    { 
    for(int j=0; j<numRows-i; j++) 
    { 
     System.out.print(" "); 
    } 
    for(int k = 0; k <= i*2; k++) 
    { 
    if(k%2 == 1) 
     System.out.print("A"); 
    else 
     System.out.print("*"); 
    } 
     System.out.println(); 
} 

Выход:

* 
    *A* 
    *A*A* 
*A*A*A* 
*A*A*A*A* 
+1

Я думаю, что этот вопрос нужно задать на другого сообщества по обмену стека. [http://codereview.stackexchange.com/](http://codereview.stackexchange.com/) – VatsalSura

+0

«Я хочу сделать это без инструкции if-else». - Зачем? Вы могли бы использовать карту, но это не облегчало бы чтение или выполнение быстрее. – Thomas

+0

@ Томас, потому что это то, чего хочет мой учитель. - Я просто не могу найти выход! –

ответ

3

Поскольку каждая строка начинается со звездочкой, а затем повторяет A* п раз (где п число строк - 1, то есть 0 для первой строки, 1 для второй и т. д.), вы можете сделать это в своем цикле, то есть напечатать первую звездочку, а затем повторить A* столько раз, сколько необходимо.

Пример:

for(int i = 0; i < numRows; i++) 
{ 
    //print whitespace for correct indentation 
    for(int j = 0; j < numRows - i; j++) 
    { 
    System.out.print(" "); 
    } 

    //print the first asterisk 
    System.out.print("*"); 

    //print as many A* as needed, i.e. row-1 times 
    for(int k = 0; k < i; k++) 
    { 
    System.out.print("A*");   
    } 
    System.out.println(); 
} 
+1

Точно то, что я только что сделал! Привет, брат! –

2
public static void main(String[] args) { 
     int numRows = 5; 
     String s = "*A*"; 
     String space = ""; 

     for (int i = 0; i < numRows - 1; i++) { 
      space += " "; 
     } 

     System.out.println(space + "*" + space); 
     for (int i = 0; i < numRows - 1; i++) { 
      String str = space.substring(0, space.length() - i - 1); 
      System.out.println(str + s + str); 
      s += "A*"; 
     } 

    } 
0

вы меняете если-то еще на линии, указанной в следующем коде

int numRows=5; 
    for(int i=0; i<numRows; i++) 
     { 
     for(int j=0; j<numRows-i; j++) 
     { 
      System.out.print(" "); 
     } 
     for(int k = 0; k <= i*2; k++) 
     { 
      //calculates according to mod value of k 
      char ch=(char) (((k%2)*'A')+((1-k%2)*'*')); 
      System.out.print(ch); 
     } 
      System.out.println(); 
    } 
+0

Это кажется слишком сложным и, следовательно, подверженным ошибкам. – Thomas

+0

Что именно здесь происходит? Char ch = (char) (((k% 2) * 'A') + ((1-k% 2) * '*')); '? –

+0

, если k равно тогда "(k% 2) * 'A'" будет производить 0 else "((1-k% 2) * '*')" будет производить 0, поэтому оставшаяся часть будет отлита на char, следовательно ch будет "A" или "*" –

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