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

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

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

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

Q&A

解決済

5回答

701閲覧

不定のコマンドライン引数の整数を*に出力

tukikai-incid

総合スコア12

Java

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

0グッド

0クリップ

投稿2018/05/08 12:59

編集2018/05/08 13:01

前提・実現したいこと

・コマンドライン引数から一つ以上の整数を受け取り、それぞれの引数に対応する数の*を出力する。
・引数の値は不定
・引数が与えられなかったときは「Usage : 」を表示する

<例>
3 ***

0  

10 **********

発生している問題・エラーメッセージ

自分なりに考えたコートがエラーになってしまいます。
*の出力開始位置を揃えるやり方が分かりません。

5 *Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at BarGraph.main(BarGraph.java:13)

該当のソースコード

public class BarGraph {
public static void main(String args[]) {
if(args.length==0) {
System.out.println("Usage : ");
}else {
int[] array = new int[args.length];
for(int i=0;i<args.length;i++) {
int value = Integer.parseInt(args[i]);
array[i]=value;
}
for(int i=0;i<args.length;i++) {
System.out.print(array[i]+" ");
for(i=0;i<array[i];i++) {
System.out.print("*");
}
}
}
}
}

試したこと

補足情報(FW/ツールのバージョンなど)

エクリプス

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

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

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

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

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

guest

回答5

0

まあ解決しているのでほぼネタですが

public static void main(String args[]) { if(args.length==0) { System.out.println("Usage : ClassName 1 [2 [3 [...]]]"); return; } int[] array = new int[args.length]; int length = 0; for(int i = 0; i < args.length; i++) { try { array[i] = Integer.parseInt(args[i]); length = Math.max(length, args[i].length()); } catch (Exception e) { // nop } } for(int i = 0; i < args.length; i++) { System.out.printf("%" + length + "s ", args[i]); for(int j = 0; j < array[i]; j++) { System.out.print("*"); } System.out.println(); } }

とすると

1 * 2 ** 10 ********** 100 ***************...

のようになります。

1週目(変換)で数値の桁数の最大値を探します。
2週目(出力)で printf (フォーマット)出力時に桁数調整します。

%3s : 左に空白をつめて3桁にする

投稿2018/05/08 22:38

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

java

1public class BarGraph { 2 public static void main(String args[]) { 3 if (args.length == 0) { 4 System.out.println("Usage : "); 5 return; 6 } 7 8 for (String arg : args) { 9 int num = Integer.parseInt(arg); 10 System.out.print(num + " "); 11 for (int i = 0; i < num; i++) { 12 System.out.print("*"); 13 } 14 System.out.println(); 15 } 16 } 17}

実行例
イメージ説明

追記
System.out.printf("%2d ", num); とすると、 数字の部分の表示幅を一定にできます。
イメージ説明

投稿2018/05/08 22:11

編集2018/05/08 22:16
katoy

総合スコア22324

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

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

0

ベストアンサー

二重ループのどっちでもiを初期化、インクリメントしてるので、iの値が壊れてます。
内側のループは array[i] 回繰り返す、という意味になるよう、別の変数を使うと良いです。

位置揃えは、内側のループ抜けた後に System.out.println() として改行すると良いです。

投稿2018/05/08 13:17

編集2018/05/08 13:19
set0gut1

総合スコア2413

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

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

tukikai-incid

2018/05/08 13:23

ありがとうございます!よくわかりました。 内側のループ抜けた後に System.out.println() をつかうと、 5***** 3*** 1* こういう結果になるのですが、 何ケタの整数を出力しても、数字と*の間にスペースをいれて、*をそろえるには どうすればいいでしょうか??
tukikai-incid

2018/05/08 13:24

スペースの後の*の開始位置を揃えたいです。
set0gut1

2018/05/08 13:26

スペースじゃなくてタブにしちゃえば見た目的にはオッケーなのではないかと思いました。 データ的にはタブの方がきれいです。 バックスラッシュtを出力すればでます。
tukikai-incid

2018/05/08 13:38

タブですね! 本当にありがとうございましたm(_ _)m
退会済みユーザー

退会済みユーザー

2018/05/08 22:43

タブだと 1 と Integer.MAX_VALUE ぐらい差があったらずれるはず 場合により1と10万 程度でも
set0gut1

2018/05/08 23:43

たしかに!タブ幅と同じくらいの桁数の数字を出力すると一段階ずれてしまいますね。
guest

0

Javaなど不要。そう、シェル芸ならね!

bash

1$ echo 3 0 10|xargs -n1 -I@ printf "@\t%@s\n"|tr ' ' '*' 23 *** 30 410 **********

投稿2018/05/08 13:14

編集2018/05/08 13:15
hichon

総合スコア5737

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

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

tukikai-incid

2018/05/08 13:15

javaの学習中なもんで・・・
guest

0

1 単純に引数を数値化して変数に保存する。
(引数なしとか数値化不可であればエラー終了)
2 1で保存した変数の数だけ*を表示する

こんな感じ

投稿2018/05/08 13:10

HogeAnimalLover

総合スコア4830

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問