2017-01-31 2 views
-1

я должен сделать эту программу в Java, который просит меня, чтобы написать программу, которая выдает V, состоящую из звездочками как показано на следующем рисунке:Рисование упражнение в Java

 * 
     * 
*  * 
* * 
    * * 
    * 

Это программа, которую я создал, но это делает не работает:

import java.util.*; 

public class Disegnav{ 
    public static void main (String [] arg){ 
    Scanner sc = new Scanner(System.in); 
    for(int i = 5; i>0; i--){ 
     int k = 9, l=0, x=3; 
     for(int j = 0; j<=9 ; j++){ 
      if(i>3 && j<k) 
       System.out.print(" "); 
      else 
       if(j==k || i==l || i==x) 
        System.out.print("*"); 
       else 
        System.out.print(" "); 
      k--; 
      l++; 
      x--; 
     } 
     System.out.println(); 
    } 
    } 
} 
+0

Не могли бы вы уточнить, что вы подразумеваете под словом «это не работает», пожалуйста? –

+0

Можете ли вы быть более ясной погодой? Ваш шаблон статичен или динамичен. Поскольку вы использовали сканер –

+0

Это означает, что это программа, которая ближе всего к годовому спросу, но которая не печатается по мере необходимости –

ответ

2

Хорошо, я могу дать вам алгоритм, но вам придется попробовать его самостоятельно.

Обратите внимание, что для первой строки количество пробелов равно 7, а затем *. Попробуйте распечатать это.

То же самое касается второй линии, но 6 пробелов и *.

Обратите внимание, что с третьей стороны есть * с обеих сторон. Итак, перейдя по той же логике, напечатайте a *, затем 5 пробелами и *. Наблюдайте, так как на обеих сторонах есть звезды, вам нужно уменьшить количество пробелов на 2. И одновременно увеличить количество пробелов на 1 перед печатью первый * на каждой строке. Надеюсь, вы это поняли.

и делайте это итеративно, пока не осталось пробелов.

0

Я не знаю условий задачи, но самый простой способ:

public static void main (String [] arg){ 
System.out.println("  *\n" + 
    "  *\n" + 
    "*  *\n" + 
    " * *\n" + 
    " * *\n" + 
    " *"); 

}

+0

Я также использовал этот метод, однако в подсказке написано, чтобы избежать этого решения, поэтому я застрял –

+1

Хороший! применение принципа [KISS] (https://en.wikipedia.org/wiki/KISS_principle);) –

1

Общее решение проблемы.

import java.util.*; 

public class Disegnav{ 
    public static void main (String [] arg){ 
    Scanner sc = new Scanner(System.in); 
    int param = sc.nextInt() - 1; 
    for(int i = 0; i < param; i++){ 
     for (int j = 0; j < i; j++) { 
      System.out.print(" "); 
     } 
     System.out.print("*"); 
     for (int j = 0; j < 2 * param - 2 * i - 1; j++) { 
      System.out.print(" "); 
     } 
     System.out.print("*"); 
     System.out.println(); 
    } 
    for (int i = 0; i < param; i++) { 
     System.out.print(" "); 
    } 
    System.out.print("*"); 
    System.out.println(); 
    } 
} 
1

Почему так сложно? Давайте держать его коротким!

class Draw { 
    public static void main(String... args) { 
     for (int x = -2, y = 8; x <= 3; ++x) { 
      String before = (x >= 0) ? String.format("%" + (x+1) + "s", "*") : ""; 
      String after = (y > 0) ? String.format("%" + (y+1) + "s", "*") : ""; 
      System.out.println(before + after); 
      y -= (x >= -1) ? 2 : 1; 
     } 
    } 
} 

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

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

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

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