課題で、forb文などで三角形のピラミッドを作成したいのですが、上手くピラミッドが作成できません。
※実行で入力エラーだと「■SC1: 入力値「1: 続行」/「-1: 終了」」とでるようになっており、下記作成式だとこの表記が出てしまいました。
間違えの場所が分からず解決しないため、間違えている部分と解決策を教えていただきたいです。
よろしくお願いいたします。
public class Check {
// 定数(メッセージ) private static final String CONST_COMMON_INIT_INFO = "\n■SC1: 入力値「1: 続行」/「-1: 終了」"; private static final String CONST_COMMON_TASK_INPUT_DANSU = "ピラミッドを作ります。何段のピラミッドを作りますか?"; private static final String CONST_COMMON_MSG_ERROR_EXCEPTION = "エラー: 入力値が不正です。"; private static final String CONST_COMMON_MSG_ERROR_END = "お疲れ様でした!"; private static final String CONST_COMMON_MSG_DAN = "これはdan段のピラミッドです。"; public static void main(String[] args) { // フィールド変数 int dan; Scanner sc; do { // 「■SC1: 入力値「1: 続行」/「-1: 終了」を表示 System.out.println(CONST_COMMON_INIT_INFO); // 変数scに入力された値を格納 sc = new Scanner(System.in); // 入力値のパラメーターチェックな値かどうかチェック try { final int execute = sc.nextInt(); // 入力値が「-1」だったら、早期処理戻し if (execute == -1) break; // 入力値が「1以外」だったら、やり直し if (execute != 1) continue; // FIXME:問① // 初期値「1」を確認。「ピラミッドを作ります。何段のピラミッドを作りますか?」を表示 // ※定数(メッセージ)より参照し適当なメッセージを設定してください。 System.out.println(CONST_COMMON_TASK_INPUT_DANSU); // 変数名danに入力された値を格納() dan = sc.nextInt(); // 段数がdanなので、dan回ループする for (int i = 1; i <= dan; i++) { // FIXME:問② // i段目での空白の個数を計算するfor文 (yohaku = dan - i) for (int yohaku = 1; yohaku < dan - 1; yohaku++) { System.out.print(" "); } // FIXME:問③ // i段目での*の個数を計算するfor文 (2 * i - 1) for (int k = 1; k < 2 * i - 1; k++) { System.out.print("*"); } // ここで段が切り替わるので改行する System.out.println(); } // FIXME:問④ // 入力された段数に応じて、「これはdan段のピラミッドです」と表示 System.out.println(CONST_COMMON_MSG_DAN); } catch (Exception e) { // InputMismatchException // ※例外処理中ではgetMessage()でエラー内容が取得できないので直接メッセージを作成 System.out.println(CONST_COMMON_MSG_ERROR_EXCEPTION); } } while (true); // 終了処理 // 「-1」が入力された場合、「お疲れ様でした!」と出力する。 sc.close(); System.out.println(CONST_COMMON_MSG_ERROR_END); }
}
> エラーが出てしまい三角形のピラミッドが完成しません。
何行目でどんなエラーが出たのか、エラーメッセージを質問中に記してください。
> ※実行で入力エラーだと「■SC1: 入力値「1: 続行」/「-1: 終了」」とでるようになっており
どんなときに入力エラーなのかが不明です。
エラーになってコンパイル出来ません。
コードはコードのマークダウン(```だけの行でコードの前後を囲む)を利用してください。
余談ですが、
>sc = new Scanner(System.in);
は「入力された値を格納」ではありません。
(ついでにループの中で Scanner を new しないでください。)
main メソッド内で宣言した変数は所謂「フィールド」ではありません。