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

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

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

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

Q&A

解決済

1回答

3373閲覧

Javaで砂時計を表示したいが、うまくいかない

drna

総合スコア22

Java

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

0グッド

0クリップ

投稿2019/04/08 05:53

編集2019/04/08 11:11

前提・実現したいこと

Javaについてです。
5を入力して砂時計を表示したいのですが、近いものにはなるのですが、きれいになりません。
1番左端の下から2番目を四角にしたいのですが、〇になってしまいます。
どこが間違っているのかわかりません。

変数名やコードが変かと思いますがよろしくお願いします。

該当のソースコード

package test; import java.util.Scanner; public class Test0806 { public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ Scanner scan = new Scanner(System.in); System.out.println("整数を入力してください"); int num = scan.nextInt(); scan.close(); int num2 = num * 2 -1; int count = 0; int jShare = 0; int x = 1; for(int i = 0; i < num2; i++) { if(i == num) { count = 1; } if(i < num) { jShare = num2 - count; }else { jShare = num + count; } for(int j = 0; j < jShare; j++) { if(i < num) { if(j < i) { System.out.print("□"); }else { System.out.print("●"); } }else { if(j < num - 1 + x){ System.out.print("□"); }else { System.out.print("●"); } if(i > num) { x++; } } } count++; System.out.println(); } } }

こののような結果を出力したいです。
イメージ説明

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

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

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

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

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

yukkuri

2019/04/08 06:54

すみません、コードはコードブロックで囲んでください。 編集画面で、<code>という場所を押し、出てきた``` ```の間にソースを貼り付けてください。
swordone

2019/04/08 07:06 編集

「どういう出力になって欲しいか」と、「現在どういう出力になっているか」を書いてください。 「1番左端の下から2番目を四角にしたいのですが、〇になってしまいます。」と言葉で書かれるよりも、実際の出力を出してもらった方が早いです。 なおその際は、コードブロック内(実際のコードを書くコードブロックとは別の場所に新たに設けて)に書いてもらうと整います。
jimbe

2019/04/08 09:23

整数を入力してください 5 ●●●●●●●●● □●●●●●●● □□●●●●● □□□●●● □□□□● □□□□□● □□□□□□□ □□□□□□□□ □□□□□□□□□ 「1番左端の下から2番目」は四角になっているようですが?
退会済みユーザー

退会済みユーザー

2019/04/08 09:55

あやしいのは、if(j < num - 1 + x){ です。x のインクリメント箇所がおかしい。x と j が同時にインクリメントされ、x の値は j ループの外側に残り、どんどん増えるのですぐに黒丸が出なくなります。x を捨てて count を使ってもよい。
drna

2019/04/08 11:13

申し訳ありませんでした。 今確認してみると先ほどの結果と違っていました。 おそらく投稿する際にどこか修正してしまったようです。
guest

回答1

0

ベストアンサー

ご参考までに.

java

1package test; 2 3import java.util.Scanner; 4 5public class Test0806 { 6 public static void main(String[] args) { 7 Scanner scan = new Scanner(System.in); 8 System.out.print("整数を入力してください-->"); 9 int num = scan.nextInt(); 10 scan.close(); 11 12 int s = num * 2 -1; 13 for(int y=0; y<=s; y++) { 14 if(y == num) continue; 15 int x = 0; 16 for(; x<(y<num?y:s-y); x++) System.out.print("□"); 17 for(; x<(y<num?s-y:y); x++) System.out.print("○"); 18 System.out.println(); 19 } 20 } 21}

投稿2019/04/08 12:28

jimbe

総合スコア12545

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

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

drna

2019/04/08 12:36

ありがとうございます。 for文にこだわりすぎてif文が多くなって自分から難していました。 こんなにもシンプルに書けるなんて驚きました。 これからもっとプログラミング頑張ります。
jimbe

2019/04/08 18:20 編集

シンプルかどうかは微妙といいますか, 恐らく分かり難いコードかと思います. int s=... の下からのループ部分は for(int x=0, d=1; x>=0; d=(x+d==num?-d:d), x+=d) { for(int i=0; i<s-x; i++) System.out.print(i<x?"□":"○"); System.out.println(); } とすれば, 7行が4行になりますが, 行数以外でシンプルに見えますでしょうか.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問