2015-02-15 2 views
0

мне нужно получить следующий шаблон enter image description hereJava печати моделей с использованием для петель

разработали следующий код.

public static void main(String[] args) { 
     int number = 9; 
     for(int i=0;i<9;i++){ 
      for(int j=0;j<18;j++){ 
       if(number==6) 
        continue; 
       System.out.print(number); 
      } 
      if(number != 6) 
      System.out.println(); 
      number--; 
     } 
    } 

Но я не могу думать о логике, чтобы получить изогнутую часть рисунка. Может ли кто-нибудь дать свое мнение?

ответ

2
if (j < number || j >= 18 - number) 
    System.out.print(number); 
else 
    System.out.print(" "); 
+0

ооооооооооооочень о себе. Спасибо приятель....! – cmit

1

Вы можете попробовать это:

public class CurveOutput { 

    public static void main(String args[]) { 
     int startNumber = 9; 

     for (int currentNum = startNumber; currentNum >= 0; currentNum--) { 
      StringBuilder line = new StringBuilder(); 
      for (int i = 0; i < currentNum; i++) { 
       line.append(currentNum); 
      } 
      for (int i = 0; i < startNumber - currentNum; i++) { 
       line.append(" "); 
      } 
      System.out.println(line.toString() + line.reverse().toString()); 
     } 
    } 
} 

этот сниппет продукции:

999999999999999999 
88888888 88888888 
7777777 7777777 
666666  666666 
55555  55555 
4444   4444 
333   333 
22    22 
1    1 
0

С моей точки зрения это действительно о программирование на правильном уровне абстракции.

Требование состоит не в том, чтобы положить как можно больше пробелов в начале или в конце, а скорее выровнять числа влево или вправо. Если бы была такая функциональность, было бы лучше и, скорее всего, более читаемым. И есть такая:

public static void main(String args[]) { 
    int startNumber = 9; 

    for (int i = startNumber; i > 0; i--) { 
     String numberToPrint = Strings.repeat("" + i, i); // from Google Guava 

     String leftHalf = String.format("%-" + startNumber + "s", numberToPrint); 
     String rightHalf = String.format("%" + startNumber + "s", numberToPrint); 

     System.out.printf("%s%s%n", leftHalf, rightHalf); 
    } 
} 
0

Попробуйте это ...

int num=9,save=9; 
     for(int i=1;i<10;i++) 
     { 

      for(int j=1;j<=18&&num!=6;j++) 
     { 
       int t=save-num; 

       if(((j<=(9-t)) || (j>(9+t)))) 
      System.out.print(num); 

       else 
        System.out.print(" "); 
     } 
      num=num-1; 
     System.out.println("\n"); 
     } 
0
package q17; 

public class Q17 { 

    public static void main(String[] args) { 

     int x = 9, y = 10; 

     for (int i = x; i >= 1; i--) { 
      if (i == 6) { 
       x--; 
       y++; 
       continue; 
      } 
      for (int j = 1; j <= 18; j++) { 

       if ((i != 9) && ((j >= x) && (j <= y))) { 
        System.out.print(" "); 

       } else { 
        System.out.print(i); 

       } 

      } 

      if (i != 9) { 
       x--; 
       y++; 
      } 
      System.out.println(); 
     } 

    } 

} 
0

РАБОТА КОД: https://i.stack.imgur.com/NFNym.png

int num = 9, save = 9; 
      for (int i = 1; i < 10; i++) { 

       for (int j = 1; j <= 18 && num != 6; j++) { 
        int t = save - num; 

        if (((j <= (9 - t)) || (j > (9 + t)))) { 
         System.out.print(num); 
        } else { 
         System.out.print(" "); 
        } 
       } 
       num = num - 1; 
       if (num != 6) { 
        System.out.println(); 
       } 
      } 

     } 

ВЫВОД:

999999999999999999 
88888888 88888888 
7777777 7777777 
55555  55555 
4444   4444 
333   333 
22    22 
1    1 

ПОВЫШЕНИЕ КОД из «Джоби Wilson Mathews» (RE-отправляете как SUGGESTION ОЧЕРЕДИ IS FULL) Примечание: Ранее код печатает пустую строку на линии № 4, которая теперь исправлена. Также предоставляется ссылка на выходное изображение.

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