[解決済み] javaでアスタリスク付きの半矢印を描くにはどうしたらいいですか?
2022-02-17 10:45:21
質問内容
私は初めてのjavaの授業で、アスタリスクを使って半矢印を描こうとしているところです。内側のループが*を描き、外側のループが矢印の高さと同じ回数だけ反復する入れ子ループを使用することになっています。私は、if-else、whileループ、forループを学びました。
これまでのところ、入力値である
矢印のベースの高さ:5
矢印ベースの幅:2
矢印の頭の幅:4
外側のループとしてwhileループを追加しようとすると、プログラムがタイムアウトしてしまいます。途方に暮れています。
次に必要な入力は2,3,4です。私のコードでは、ベースとなる右の高さ(2)は取得できますが、幅は取得できません。
最後に必要な入力は、3, 3, 7です。私のコードでは、このどれもがまったく正しくありません。これが今のところ私の持っているものです。
どのようなループを使えば、正しい幅になるのでしょうか?
Scanner scnr = new Scanner(System.in);
int arrowBaseHeight = 0;
int arrowBaseWidth = 0;
int arrowHeadWidth = 0;
int i = 0;
System.out.println("Enter arrow base height: ");
arrowBaseHeight = scnr.nextInt();
System.out.println("Enter arrow base width: ");
arrowBaseWidth = scnr.nextInt();
System.out.println("Enter arrow head width: ");
arrowHeadWidth = scnr.nextInt();
for (i = 1; i <= arrowBaseHeight; ++i) {
// Draw arrow base (height = 3, width = 2)
System.out.println("**");
}
// Draw arrow head (width = 4)
System.out.println("****");
System.out.println("***");
System.out.println("**");
System.out.println("*");
出力される矢印の例。
**
**
**
**
****
***
**
*
解決方法は?
この問題では、繰り返すべき正確な回数がわかっているので、for-loopを使いたいと思うでしょう。これは、ユーザーが矢印の各パーツの大きさを入力しているからです。
Scanner scnr = new Scanner(System.in);
int arrowBaseHeight = 0;
int arrowBaseWidth = 0;
int arrowHeadWidth = 0;
int i = 0;
System.out.println("Enter arrow base height: ");
arrowBaseHeight = scnr.nextInt();
System.out.println("Enter arrow base width: ");
arrowBaseWidth = scnr.nextInt();
System.out.println("Enter arrow head width: ");
arrowHeadWidth = scnr.nextInt();
//Your code above | Below is the modified code
String ast = ""; //String ast will contain how many asterisk we want for the base width;
for (int x = 1; x <= arrowBaseWidth; x++) //Loop forms the base width of the arrow
{
ast += "*"; //This adds as many asterisks as we need to make the base width. SO if they enter 4, we get 4 *;
}
for (i = 1; i < arrowBaseHeight; ++i)
{
System.out.println(ast); //Prints out the base width, which is now a String object
}
int tempHeadWidth = arrowHeadWidth; //Added this tempHeadWidth variable since we will be modifying it directly and
//we don't want to modify the original data and variable (it will cause problems if we do.
for (int y = 1; y <= arrowHeadWidth; y++)
{
for(int z = tempHeadWidth; z > 0; z--) //This loop prints the amount of asterisks we need per line in the arrowHead
{
System.out.print("*");
}
// Once the loop above is finished, the rest of the code will execute in the main for-loop and then scheck if it will run again.
tempHeadWidth -= 1; //So we are lowering the tempHeadWidth by one so the next time it enters
//the nested (2nd) for loop it will be one asterisk smaller
System.out.println(); //This makes a new line to keep adding more stars for the next row
}
このメソッドでは、ユーザーが矢印のサイズを自由に入力することができます(もちろん、int 型の値の境界内にとどまります)。
関連
-
[解決済み】スレッド "main "での例外 java.util.NoSuchElementException
-
[解決済み] android.os.NetworkOnMainThreadException' を修正するにはどうすればよいですか?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] Mavenを使用して、依存関係を持つ実行可能なJARを作成するにはどうすればよいですか?
-
[解決済み] Javaで配列に特定の値が含まれているかどうかを判断するにはどうすればよいですか?
-
[解決済み] Java で、あるコンストラクタを別のコンストラクタから呼び出すにはどうすればよいですか?
-
[解決済み] Javaで配列を宣言し、初期化する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Hibernateエラー:同じ識別子値を持つ別のオブジェクトがすでにセッションに関連付けられました。
-
[解決済み】Android Studio クラス org.codehaus.groovy.runtime.InvokerHelper を初期化できませんでした。
-
[解決済み】Android java.lang.IllegalStateException: Android java.lang.IllegalStateException: Could not execute method of the activity
-
[解決済み】"比較メソッドはその一般契約に違反する!"
-
[解決済み】メソッド本体がない、またはJavaで抽象的な宣言をする
-
[解決済み】Javaを使用するSelenium - ドライバの実行ファイルのパスは、webdriver.gecko.driverシステムプロパティで設定する必要があります。
-
[解決済み】Javaを包含するクラスではないのか?
-
[解決済み】Javaの未処理例外について
-
[解決済み] SQLエラー。0, SQLState: 08S01 通信リンクの失敗 [重複]。
-
[解決済み】 executeQuery()でデータ操作文が発行できない。)