2017-10-02 8 views
-1

プログラムは、それがやり直すべきかどうかについてのユーザの入力を得るが、その後に何もしないかどうかについての入力を得る。私は元の入力値をすべて0に設定しています。これはおそらく理由です。ユーザーが再度再生したいときに、どのようにして新しい入力を得ることができますか?誰かが配列なしでこのプログラムを作成するより良い方法を知っているなら、以下のコードを投稿することができれば大いに感謝します。再度機能の問題を再生する

import java.util.Scanner; 
import java.util.*; 

public class Shapes { 

public static void main(String[] args) { 

    Scanner userInput = new Scanner(System.in); 
    System.out.print("You can view any of the following shapes: "); 
    System.out.print("\n1 Square"); 
    System.out.print("\n2 Right-angle Triangle"); 
    System.out.print("\n3 Pyramid"); 
    System.out.print("\n4 Hourglass"); 
    System.out.print("\n5 Diamond"); 

    System.out.print("\nEnter a integer to choose a shape: "); 
    String shape = userInput.nextLine(); 

    System.out.print("\nEnter the height of the shape: "); 
    int inputOne = userInput.nextInt(); 

    System.out.print("Enter a character: "); 
    char ch = userInput.next().charAt(0); 
    System.out.println("\n"); 

    do { 

     if (shape.equalsIgnoreCase("1")) { 
      square(ch, inputOne); 
      System.out.println(); 
     } 

     if (shape.equalsIgnoreCase("2")) { 
      triangle(ch, inputOne); 
      System.out.println(); 
     } 

     if (shape.equalsIgnoreCase("3")) { 
      pyramid(ch, inputOne); 
      System.out.println(); 
     } 

     if (shape.equalsIgnoreCase("4")) { 
      diamond(ch, inputOne); 
      System.out.println(); 
     } 

     if (shape.equalsIgnoreCase("5")) { 
      hourglass(ch, inputOne); 
      System.out.println(); 
     } 
     shape = "0"; 
     inputOne = 0; 
     ch = 0; 

    } while (playAgain()); 
} 

private static boolean playAgain() { 
    Scanner keyboard = new Scanner(System.in); 
    System.out.print("Play again? (Y/N): "); 
    String replay = keyboard.nextLine(); 
    return replay.equalsIgnoreCase("Y"); 

} 

public static void square(char c, int n) { 

    char[] a = new char[n]; 
    Arrays.fill(a, c); 
    for (; n-- > 0;) 
     System.out.println(a); 

} 

public static void triangle(char c, int n) { 

    for (int i = 1; i <= n; i++) { 
     char[] a = new char[i]; 
     Arrays.fill(a, c); 
     System.out.println(a); 
    } 

} 

public static void pyramid(char c, int n) { 

    for (int i = 0; i < n; i++) { 
     while (true) { 
      char[] s = new char[n - i - 1]; 
      Arrays.fill(s, ' '); 
      System.out.print(s); 

      char[] a = new char[i * 2 + 1]; 
      Arrays.fill(a, c); 
      System.out.println(a); 
     } 
    } 

} 

public static void diamond(char c, int n) { 
    boolean odd = n % 2 == 1; 
    n++; 
    int mid = n/2; 
    int mi = mid; 
    if (odd) 
     mi--; 
    for (int y = 1; y < n; y++) { 
     for (int x = 1; x < n; x++) { 
      System.out.print((Math.abs(x + y - n) > mi || Math.abs(x - y) > mi) ? ' ' : c); 
     } 
     System.out.println(); 
    } 

} 

public static void hourglass(char c, int n) { 
    boolean odd = n % 2 == 1; 
    if (odd) 
     n++; 
    int mid = n/2; 
    for (int y = 0; y < n; y++) { 
     if (odd && y == mid) 
      continue; 
     for (int x = 1; x < n; x++) { 
      int a = 0; 
      if (Math.abs(x + y - mid) >= mid) 
       a++; 
      if (Math.abs(x - y - mid) >= mid) 
       a++; 
      System.out.print((a % 2 == 0) ? c : ' '); 
     } 
     System.out.println(); 
    } 

} 

} 
+0

はあなたがdo-whileループ内でのユーザの入力を取得する必要があります。 – Mark

+0

@マークどうすればいいですか? –

答えて

0

do/whileループ内にユーザー入力を促す必要があります。今では、ループの上にユーザーがいるように促しています。そのため、コード内で1回しか発生しません。

//move this stuff into the do/while 
Scanner userInput = new Scanner(System.in); 
System.out.print("You can view any of the following shapes: "); 
System.out.print("\n1 Square"); 
System.out.print("\n2 Right-angle Triangle"); 
System.out.print("\n3 Pyramid"); 
System.out.print("\n4 Hourglass"); 
System.out.print("\n5 Diamond"); 

System.out.print("\nEnter a integer to choose a shape: "); 
String shape = userInput.nextLine(); 

System.out.print("\nEnter the height of the shape: "); 
int inputOne = userInput.nextInt(); 

System.out.print("Enter a character: "); 
char ch = userInput.next().charAt(0); 
System.out.println("\n"); 

do { 
    ^^^^ move that stuff in here 
}while(playAgain()) 

デバッガでコードをステップ実行するだけで簡単に発見できます。

+0

これが問題の解決に役立つ場合は、「回答済み」とマークすることを検討してください。 –

+0

答えとしてマークするのに3分待たなければならない –

1

ユーザーは入力を1回だけ要求し、0に設定するだけです。ループの次の反復では、は、0であるため、ifステートメントのいずれも真でないため、プログラムは何も行いません。

は、ループ内で、ユーザの入力を取得し、ゼロ・アウトの変数を削除します。

public static void main(String[] args) { 
    Scanner userInput = new Scanner(System.in); 

    do { 
     System.out.print("You can view any of the following shapes: "); 
     System.out.print("\n1 Square"); 
     System.out.print("\n2 Right-angle Triangle"); 
     System.out.print("\n3 Pyramid"); 
     System.out.print("\n4 Hourglass"); 
     System.out.print("\n5 Diamond"); 

     System.out.print("\nEnter a integer to choose a shape: "); 
     String shape = userInput.nextLine(); 

     System.out.print("\nEnter the height of the shape: "); 
     int inputOne = userInput.nextInt(); 

     System.out.print("Enter a character: "); 
     char ch = userInput.next().charAt(0); 
     System.out.println("\n"); 

     if (shape.equalsIgnoreCase("1")) { 
      square(ch, inputOne); 
      System.out.println(); 
     } 

     if (shape.equalsIgnoreCase("2")) { 
      triangle(ch, inputOne); 
      System.out.println(); 
     } 

     if (shape.equalsIgnoreCase("3")) { 
      pyramid(ch, inputOne); 
      System.out.println(); 
     } 

     if (shape.equalsIgnoreCase("4")) { 
      diamond(ch, inputOne); 
      System.out.println(); 
     } 

     if (shape.equalsIgnoreCase("5")) { 
      hourglass(ch, inputOne); 
      System.out.println(); 
     } 
    } while (playAgain()); 
} 
関連する問題