【JAVA】数字をひし形に出力するプログラムについ

このQ&Aのポイント
  • JAVAについて質問です。
  • 上から10段目以降は1の位が出力されるようにしたいのです。
  • それにはこのプログラムをどう修正すればよいでしょうか?
回答を見る
  • ベストアンサー

【JAVA】数字をひし形に出力するプログラムについ

JAVAについて質問です。 import java.util.Scanner; public class Test { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); int count = 1, space = 0; for (int i = 1; i < 2 * n; i++) { if (i <= n) { space++; } else { space--; } for (int spc = n - space; spc > 0; spc--) { System.out.print(" "); } for (int j = 0; j < count; j++) { System.out.print(i); } if (i < n) { count = count + 2; } else { count = count - 2; } System.out.println(); } in.close(); } } ↑のプログラムで標準入力に例えば8と入力すると、 _______1↵ ______222↵ _____33333↵ ____4444444↵ ___555555555↵ __66666666666↵ _7777777777777↵ 888888888888888↵ _9999999999999↵ __1010101010101010101010↵ ___111111111111111111↵ ____12121212121212↵ _____1313131313↵ ______141414↵ _______ 15↵ という風なひし形が出力されます。 「_」は実際には出力されません。 これを _______1↵ ______222↵ _____33333↵ ____4444444↵ ___555555555↵ __66666666666↵ _7777777777777↵ 888888888888888↵ _9999999999999↵ __00000000000↵ ___111111111↵ ____2222222↵ _____33333↵ ______444↵ _______5↵ という風にしたいです。 (上から10段目以降は1の位が出力されるようにしたいのです) それにはこのプログラムをどう修正すればよいでしょうか?

  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

// 変数を一つ追加 int count = 1, space = 0; ↓ int count = 1, space = 0; int outputNum = 0; // 最初のfor文の頭で10で割った余りをセット outputNum = i % 10; // 出力する数値をoutpuNumへ変更 System.out.print(outputNum); こんなんでどうでしょう? コンパイル・動作確認していないので、そこは試してみてください。 import java.util.Scanner; public class Test { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); int count = 1, space = 0; int outputNum = 0; for (int i = 1; i < 2 * n; i++) { outputNum = i % 10; if (i <= n) { space++; } else { space--; } for (int spc = n - space; spc > 0; spc--) { System.out.print(" "); } for (int j = 0; j < count; j++) { System.out.print(outputNum); } if (i < n) { count = count + 2; } else { count = count - 2; } System.out.println(); } in.close(); } }

indojiindojin
質問者

お礼

ありがとうございます! 試してみます!!

関連するQ&A

  • javaのプログラム

    int型の配列の各要素に1~10の乱数を代入し、各要素の値を縦向きの*のグラフで表示するプログラムを作っているのですが、結果がランダムででるので、自分の書いたプログラムが正しいのかわかりません。ソースを載せますので合っているのか間違っているか教えて下さい。もし間違っているならどこが間違いなのか教えていただけると嬉しいです。よろしくお願いします。 ●ソース import java.util.Random; import java.util.Scanner; class Graph { public static void main(String[] args){ Random rand = new Random(); Scanner stdIn = new Scanner(System.in); System.out.print("要素数:"); int n = stdIn.nextInt(); int a[] = new int[n]; for (int i = 0; i < n; i++) a[i] = 1 + rand.nextInt(10); for (int i = 1; i <= 10; i++){ for (int j = 0; j < n; j++) if (a[j] <= i) System.out.print("* "); else System.out.print(" "); System.out.println(); } } } ●実行例 要素数:12 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

    • ベストアンサー
    • Java
  • 【C→JAVA】素数の組の数を求めるプログラム

    以下はC言語のプログラムです。 標準入力に正の偶数値 n(2≦n≦10,000) を入力すると足して n になる素数の組の数を求め、 標準出力に出力するプログラムなのですが、 これをJAVA用のプログラムに置き換えるとすると どのようなプログラムになるのでしょうか? よろしくお願いいたします。 #include <stdio.h> #include <math.h> //Compiler version gcc 6.3.0 #define N 10000 int primes[N + 1] = {0}; void sieve(int); int main() { int n,count = 0; sieve(N); scanf("%d",&n); for (int i = 1;i <= n / 2 + 1;i++) { for (int j = i + 1;j < n;j++) { if (primes[i] && primes[j] && i + j == n) { count++; } } } printf("%d\n",count); return 0; } void sieve(int n) { int limit = (int)sqrt(n) + 1; for (int i = 2;i <= n;i++) { primes[i] = 1; } for (int i = 2;i < limit;i++) { if (primes[i]) { for (int j = 2; i * j <= n;j++) { primes[i * j] = 0; } } } }

  • javaの二次元配列について質問です

    配列上にあるただ一つの1を入力に応じて移動させるプログラムを作っています。 たとえば0が入力されたら 0, 0, 0 0, 1, 0 0, 1, 0 → 0, 0, 0 0, 0, 0 0, 0, 0 という風に移動させ、端に行ったら移動できないようにしたいです。 今書いたプログラムだと、最初にある1が残ったままになってしまいます。 int[] p = {-1, -1}; int[][] im = new int[3][3]; Scanner scn = new Scanner(System.in); for (int i = 0; i < p.length; i++) { p[i] = 1; } im[p[0]][p[1]] = 1; for (int i = 0; i < im.length; i++) { for (int j = 0; j < im[i].length; j++) { System.out.print(im[i][j] + ","); } System.out.println(); } int n = 0; n = scn.nextInt(); if (n == 0) { p[0] -= 1; } else if (n == 1) { p[1] += 1; } else if (n == 2) { p[0] += 1; } else if (n == 3) { p[1] -= 1; } im[p[0]][p[1]] = 1; for (int i = 0; i < im.length; i++) { for (int j = 0; j < im[i].length; j++) { System.out.print(im[i][j] + ","); } System.out.println(); }

  • *を表示させるプログラムを

    //putChars()メソッドを呼ばず(使わず) for文のネストで、できますか import java.util.Scanner; class IsoscelesTriangleRB { //--- 文字cをn個連続表示 ---// static void putChars(char c, int n) { while (n-- > 0) System.out.print(c); } public static void main(String[] args) { Scanner stdIn = new Scanner(System.in); System.out.println("右下直角の三角形を表示します。"); System.out.print("段数は:"); int n = stdIn.nextInt(); for (int i = 1; i <= n; i++) { putChars(' ', n - i); // ' 'をn - i個表示 putChars('+', i); // '+'を i 個表示 System.out.println(); } } }

  • javaの数字当てゲーム

    javaで数字当てゲーム作りたいです。 ここまで出来ています。 しかし、もう一度やりますか?というオプションで、yと入力すればもう一回、 nと入力すれば終わるようにしたいです。 それから、最後に何回ゲームを遊んだか、トータルで数字を何回予想したか、という情報も出力したいです。 できれば、正解するまでに平均で何回かかったかと、一番少なかった数も出力したいです。 よろしくお願いします import java.util.*; public class NumberGuess { public static void main(String args[]) { boolean b = true; int computer = (int) (Math.random() * 100) + 1; int player = 0; int count = 0; System.out.println("1~100の数当てゲーム"); if (computer < 0) { computer *= -1;} while (b) { count++; Scanner keyboard = new Scanner(System.in); System.out.print("1~100の数字を入力してください "); player = keyboard.nextInt(); if (computer > player) { System.out.println("CPUが作成した数字はもっと大きいです"); } else if (computer < player) { System.out.println("CPUが作成した数字はもっと小さいです"); } else if (computer == player) { System.out.println( count + "回目で当てました"); } } } } 直すべきところもあれば教えてください。

  • 要素数が10の配列で、乱数0~9の値が重複しないようにする方法がわからなくて困っています。

    JAVAの練習問題でわからなくて困っています 以下は線形探索のプログラムで、このプログラムを改良して、 要素数が10の配列で、乱数0~9の値が重複しないようにする方法がわからなくて困っています。 以下のような簡単なプログラムでできる方法で行いたいです。 どなたか答えまたはヒントを下さい、お願いします。 ------------------------------------------------------------ import java.util.Random; import java.util.Scanner; public static void main (String[] args) { Random rand = new Random(); Scanner stdIn = new Scanner(System.in); final int n = 10; //要素数 int[] a = new int[n]; //配列を宣言 for (int j = 0; j < n;) a[j] = rand.nextInt(10); System.out.print("配列aの全要素の値\n{ "); for (int j = 0; j < n; j++) System.out.print(a[j] + " "); System.out.println("}"); System.out.print("探す数値 : "); int key = stdIn.nextInt(); int i; for (i = 0; i < n; i++) if (a[i] == key) break; if (i < n) //探索成功 System.out.println("それはa[" + i + "]にあります。"); else //探索失敗 System.out.println("それはありません。"); } }

  • JAVAで配列を使って * を縦向きのグラフで表示したいです。

    JAVAの勉強をしています。 このプログラムは配列に乱数を生成して * を 横向きにするプログラムです。 練習問題で、以下のプログラムを書き換えて、* を縦向きのグラフで表示する問題なのですが、解く方法がわかりません。 どなたか答えもしくはヒントを下さい。 よろしくお願いします。 import java.util.Random; import java.util.Scanner; public class Test06_04 { public static void main (String[] args) { Random rand = new Random(); Scanner stdIn = new Scanner(System.in); System.out.print("要素数 : "); int n = stdIn.nextInt(); //要素数を読み込む int[] a = new int[n]; //配列を生成 for (int i = 0; i < n; i++) { a[i] = 1+ rand.nextInt(10); } for (int i = 0; i < n; i++) { System.out.print("a[" + i + "] : "); for (int j = 0; j < a[i]; j++) System.out.print('*'); System.out.println(); } } }

    • ベストアンサー
    • Java
  • 累乗のプログラム

    以下は、整数iの1乗からj乗まで求めるJAVAの累乗プログラムです。 int i=3, j=5; int n, kekka=1; for(n=1;n<=j;n ){ kekka=kekka*i; System.out.println(i "の" n "乗は," kekka "です."); } この2行目と4行目のkekkaの含まれる式の意味が全く分からないのですが、教えてください。

    • ベストアンサー
    • Java
  • また自分で組んでわからなくなって聞いて欲しいのです

    明快Java入門演習問題4-22のピラミッド作成がわけわかんなくって色々やっていたら今はこうなりました 今後の理解のためまた恥を忍んでご質問します。 ご説明のほどをお願いします。 import java.util.Scanner; public class Ensyuu422 { static int n=0; static Scanner sc; /** * @param args */ public static void main(String[] args) { sc=new Scanner(System.in); System.out.println("ピラミッドを作成します"); System.out.print("何段ですか?"); n=sc.nextInt(); for(int i=1; i<=n; i++){ for(int j=1; j<n-i+1; j++){ System.out.print("*"); } } } } 何がわからないかというと何で*が10個も表示されるかについてです。 j<n-iということはjは1nは例えば入力値が5だとすると1<5-iに1を足して状態になりますよね? ここまではわかっているんですがならば何故10個も*が表示されるのがわからないです。 出来たらやんわりとお願いします。

    • ベストアンサー
    • Java
  • なんで例外出力されるんですか?

    また恥を忍んで理解の為動かないソースを載せます。 idexの入力値が1だとしてnの入力値が3の話をします このソースを実行させると以下の例外が出力されます java.lang.ArrayIndexOutOfBoundsException この例外の意味は不正なインデックスを使って配列がアクセスされたときに発生する例外と意味です。 ではなんでjava.lang.ArrayIndexOutOfBoundsException出力されるんですか メソッド部分のint[] tmp=new int[a.length-n]; for(int i=idex+n; i<a.length; i++){ tmp[i]=a[i]; } return tmp; } はtmpは配列aの長さ分-nですから配列2番目まで入ることはわかっています で次のカウントアップさせる変数int宣言して i=idex+n;を i<a.length; i++をしていますからidexが1でnが3だったら4で4<6になるんじゃないんですか? import java.util.Scanner; public class Ensyuu725 { /** * @param args */ public static void main(String[] args) { Scanner sc=new Scanner(System.in); int []a=new int[]{1,3,4,7,9,11}; for(int i=0; i<a.length; i++){ System.out.println("配列aの要素は"+"a["+i+"]"+a[i]); } System.out.print("削除する a[idx]:"); int idex=sc.nextInt(); System.out.print("a[idex]から何個削除しますか?"); int n=sc.nextInt(); int k[]=arrayRmvOfn(a,idex,n); for(int i=0; i<k.length; i++){ System.out.println("配列aが消された後の要素は"+"k["+i+"]"+k[i]); } } /** * @param a * @param idex * @param n * @return tmp */ private static int[] arrayRmvOfn(int[] a, int idex, int n) { int[] tmp=new int[a.length-n]; for(int i=idex+n; i<a.length; i++){ tmp[i]=a[i]; } return tmp; } } ご指導お願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう