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

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

ただいまの
回答率

90.48%

  • Java

    14103questions

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

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

解決済

回答 5

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 327

 前提・実現したいこと

・コマンドライン引数から一つ以上の整数を受け取り、それぞれの引数に対応する数の*を出力する。
・引数の値は不定
・引数が与えられなかったときは「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/ツールのバージョンなど)

エクリプス

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 5

+1

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

    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桁にする

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

checkベストアンサー

0

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/08 22:23

    ありがとうございます!よくわかりました。

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

    キャンセル

  • 2018/05/08 22:24

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

    キャンセル

  • 2018/05/08 22:26

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

    キャンセル

  • 2018/05/08 22:38

    タブですね!
    本当にありがとうございましたm(_ _)m

    キャンセル

  • 2018/05/09 07:43

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

    キャンセル

  • 2018/05/09 08:43

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

    キャンセル

0

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

こんな感じ

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

public class BarGraph {
    public static void main(String args[]) {
        if (args.length == 0) {
            System.out.println("Usage : ");
            return;
        }

        for (String arg : args) {
            int num = Integer.parseInt(arg);
            System.out.print(num + " ");
            for (int i = 0; i < num; i++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}


実行例
イメージ説明

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

-2

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/05/08 22:15

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

    キャンセル

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

  • ただいまの回答率 90.48%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    表の作り方

    JAVA初心者です。JAVAのくりかえしを使って、百ます計算の表を作成してみましたが、うまくいきません。以下が足し算の計算表です。 public class Tasizan {

  • 解決済

    char配列

    char配列に関して、以下のプログラムを作成しました。 import java.util.Scanner; public class Sample {     public s

  • 受付中

    JAVAのコンソールログでRPGの作成

    学校の課題でコンソールログで動くRPGを作れといわれました 以下のコードなのですが主人公(●)が動きません どうすれば動ききますか? import java.util.Scanne

  • 解決済

    2番目の最大値の求め方

    javaを学習し始めで不明な個所がありますので、質問させていただきます。 4つの数値があり、それぞれを比較し2番目の最大値を取得するプログラムを作成したいと思っています。同じ

  • 解決済

    配列を順番に比較する

    int piecearray[][] = { { (x - 1), (y - 1) }, { x, (y - 1) }, { (x + 1), (y + 1) }, { (x -

  • 解決済

    Java if文を多様しないで組みたい

    現在Javaにて名前と科目を入力したら登録した点数がでるプログラムを組んでいます。 エラーは無いのですがif文を多様してしまっているのでif文をあまり使わずに作りたいです。

  • 解決済

    Java コマンドライン引数で平均を求める

    以下の問いのプログラムを現在作成しています。 Java 標準入力から、n個の年齢を受け取り、その平均年齢を算出するプログラムを作成してください。   年齢はコマンドライン引数

  • 解決済

    System.out.printからSystem.out.writeへの書き換え

    単純な足し算プログラムの書き換えができません。 System.out.printではなく、System.out.writeを使用するプログラムに書き換えたいのですが、 うま

同じタグがついた質問を見る

  • Java

    14103questions

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