質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

3回答

825閲覧

三角形のピラミッドを完成させたい

mami_murabata

総合スコア1

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2023/05/24 11:22

編集2023/05/24 12:53

課題で、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); }

}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

episteme

2023/05/24 12:21 編集

> エラーが出てしまい三角形のピラミッドが完成しません。 何行目でどんなエラーが出たのか、エラーメッセージを質問中に記してください。
episteme

2023/05/24 13:19

> ※実行で入力エラーだと「■SC1: 入力値「1: 続行」/「-1: 終了」」とでるようになっており どんなときに入力エラーなのかが不明です。
jimbe

2023/05/24 15:40 編集

エラーになってコンパイル出来ません。 コードはコードのマークダウン(```だけの行でコードの前後を囲む)を利用してください。 余談ですが、 >sc = new Scanner(System.in); は「入力された値を格納」ではありません。 (ついでにループの中で Scanner を new しないでください。) main メソッド内で宣言した変数は所謂「フィールド」ではありません。
guest

回答3

0

こういうことでしょうか。
(課題ということなのでわざとあちこち弄っています)

java

1import java.util.*; 2 3public class Main { 4 public static void main(String[] args) { 5 Scanner sc = new Scanner(System.in); 6 7 for(int execute=1; execute==1; ) { 8 try { 9 System.out.println("ピラミッドを作ります。何段のピラミッドを作りますか?"); 10 int dan = sc.nextInt(); 11 12 for(int i=1; i<=dan; i++) { 13 for(int yohaku=dan-i; yohaku>0; yohaku--) System.out.print(" "); 14 for(int j=0; j<2*i-1; j++) System.out.print("*"); 15 System.out.println(); 16 } 17 System.out.println("これは"+dan+"段のピラミッドです。"); 18 } catch(InputMismatchException e) { 19 System.out.println("エラー: 入力値が不正です。"); 20 sc.next(); //エラーの原因は残っているので捨てる必要がある 21 } 22 23 for(execute=0; execute!=1 && execute!=-1; ) { 24 System.out.println("\n1:続行/-1:終了"); 25 try { 26 execute = sc.nextInt(); 27 } catch(InputMismatchException e) { 28 sc.next(); 29 } 30 } 31 } 32 33 System.out.println("お疲れ様でした!"); 34 } 35}
ピラミッドを作ります。何段のピラミッドを作りますか? 5 * *** ***** ******* ********* これは5段のピラミッドです。 1:続行/-1:終了 1 ピラミッドを作ります。何段のピラミッドを作りますか? abc エラー: 入力値が不正です。 1:続行/-1:終了 z 1:続行/-1:終了 -1 お疲れ様でした!

投稿2023/05/24 17:05

jimbe

総合スコア12632

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

// i段目での空白の個数を計算するfor文 (yohaku = dan - i) for (int yohaku = 1; yohaku < dan - 1; yohaku++) {

// i段目での*の個数を計算するfor文 (2 * i - 1) for (int k = 1; k < 2 * i - 1; k++) {

は、言ってること(コメント) と やってること(実行文) が違います。

投稿2023/05/24 12:28

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mami_murabata

2023/05/24 12:55

ご指摘ありがとうございます。 検索などで調べながら行ったのですが、この式でもコメントと実行文は違いますでしょうか? for (int yohaku = 1; yohaku < dan - i + 1; yohaku++) { System.out.print(" "); } for (int yohaku = 1; yohaku < (i - 1) * 2 + 1; yohaku++) { System.out.print("*"); }
episteme

2023/05/24 12:57

実行してみりゃわかるのでは? 期待するピラミッドが出力されますか?
mami_murabata

2023/05/24 13:03

出力されませんでした。ありがとうございます。
guest

0

全角の1がところどころ混入しています

投稿2023/05/24 11:40

ozwk

総合スコア13521

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mami_murabata

2023/05/24 12:29

すべて半角にしましたがエラーがでてしまいます。。。
episteme

2023/05/24 12:38 編集

どこでどんなエラーが出たのか、エラーメッセージ"そのまま"を記してください。 # 期待する結果が得られないことを エラーがでる と表現しているんじゃありませんよね?
mami_murabata

2023/05/24 12:46

申し訳ございません。課題で「■SC1: 入力値「1: 続行」/「-1: 終了」」のように表示される場合は入力エラーとなるような作りとなっていますと記載があったので、エラーという表現で使用してしまいました。
episteme

2023/05/24 14:01 編集

do { の直後で「■SC1: 入力値「1: 続行」/「-1: 終了」」を出力してるから、そうなるのはアタリマエですよね? それを出力している位置が違うんじゃありませんか?
jimbe

2023/05/24 16:18

>「■SC1: 入力値「1: 続行」/「-1: 終了」」のように表示される場合は入力エラーとなるような作り 課題の全文でも提示されないと分かりませんが、逆では? 「『入力が不正』と表示したら次は『続行/終了』を選択する」なら分かりますが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問