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

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

ただいまの
回答率

88.93%

コマンドラインの文字と数字を別の配列に入れたいです。

受付中

回答 3

投稿 編集

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

hfiehifhifi

score 0

前提・実現したいこと

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

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 0
    at Myproject/hello.Seiseki.main(Seiseki.java:23)

該当のソースコード

package hello;

public class Seiseki {

    public static void main(String[] args) {


        double total = 0;
        double average = 0;
        double sd = 0;
        double sum = 0;
        String   score;
        double [] score1, hensachi;
        score1 = new double [0];
        hensachi = new double [0];
        String[] name = new String [args.length/2];

        for(int i = 0; i < args.length; i++ ) { //データの格納
            if (i % 2 ==0) {  
                name[i] = args[i];
            } else if (i % 2 ==1) { 
               score = args[i]; //素点               
               score1[i] = Double.parseDouble(score);//素点をString型からdouble型に変更
            }
        }
        for (int j = 0; j < score1.length; j++) {
            total+= score1[j];
        }
            average = total / (score1.length);//平均
            double b = ((double)Math.round(average * 10))/10; //平均を四捨五入

        for(int k = 0; k < score1.length; k++) {
        sum += sqr(score1[k] -b);//標準偏差
        }
        sd = Math.sqrt(sum/score1.length);
        double c = ((double)Math.round(sd * 100))/100; //標準偏差を四捨五入

        for (int l = 0; l < score1.length; l++) {
            hensachi[l] =  50 +(((score1[l] - b)/c)*10 );//偏差値
        }

        double seiseki[][];
          seiseki = new double [2][score1.length];
          seiseki[0] = score1;
          seiseki[1] = hensachi;

          System.out.println("平均 = " + b);//平均の表示
          System.out.println("標準偏差 = " + c);//標準偏差の表示
          System.out.println("         Score"+ "  StdScr");
          System.out.println(name);




            System.out.print(name +"     "+ seiseki[0]+"     " );//名前の表示         
            //偏差値の表示
        }




    private static double sqr(double d) {
        return d * d;
    }

試したこと

何があっているのか間違っているのかすらわかりません。。

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

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 3

0

for(int i = 0; i < args.length; i++ ) { //データの格納
if (i % 2 ==0) {  
name[i] = args[i];

name[i]では配列の範囲外となってしまいますね

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2020/07/12 14:00

    > score1 = new double [0];
    > hensachi = new double [0];

    双方サイズ0ですやん

    キャンセル

  • 2020/07/12 14:32 編集

    アカウントの再作成ですかね? 7月にはいってすでに回答した
    質問の前提条件、想定結果が殆ど同じですが

    キャンセル

  • 2020/07/12 14:37

    すみません。同じ質問をしていた方がいらっしゃったんですね。
    同じものを解いているのだと思われます。

    キャンセル

0

最終結果はこのようにしたいです。
Average = 75.9
Standard Deviation = 18.85
Anne Score 100
StdScr 62.8
Diana Emily Bryce Jane
Kilmeny Marigold 42 64
32.0 43.7
Glbert
99 60 89 79 74 62.3 41.6 57.0 51.7 49.0

変な結果表示ですね。

package hello;

public class Seiseki {

     public static void main(String[] args) {
            // args : Anne 100 Glbert 99 Diana 60 Emily 89
            //        Bryce 79 Jane 74 Kilmeny 42 Marigold 64
        int n = args.length / 2;
        int[] score = new int[n];
        double[] hensachi = new double[n];
        String[] name = new String [n];

        int j = 0;
        double total = 0;
        for (int i = 0; i < n; i++) {
            name[i] = args[j++];
            score[i] = Integer.parseInt(args[j++]);
            total += score[i];
        }
        double average = total / n;

        double sum = 0;
        for(int i = 0; i < n; i++)
            sum += sqr(score[i] - average);

        double sd = Math.sqrt(sum / n);

        for (int i = 0; i < n; i++)
            hensachi[i] =  50 + 10 * (score[i] - average) / sd;

        System.out.printf("Average = %.1f\n", average);
        System.out.printf("Standard Deviation  = %.2f\n", sd);
        System.out.printf("%s Score %d\n", name[0], score[0]);
        System.out.printf("StdScr %.1f\n", hensachi[0]);
        for (int i = 2; i < 6; i++) System.out.print(name[i] + " ");
        System.out.printf("\n%s %s %d %d\n", name[6], name[7], score[6], score[7]);
        System.out.printf("%.1f %.1f\n", hensachi[6], hensachi[7]);
        System.out.println(name[1]);
        for (int i = 1; i < 6; i++) System.out.print(score[i] + " ");
        for (int i = 1; i < 6; i++) System.out.printf("%.1f ", hensachi[i]);
        System.out.println();
    }
    private static double sqr(double d) { return d * d; }
}

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2020/07/12 15:23

    ご回答ありがとうございます!
    私のミスで結果表示が変になってしまいました。
    結果は表のようにしたくて、
    平均
    標準偏差
    名前 素点 偏差値 ←×8
    のようなものにしたいです。

    ちなみにfor (int i = 0; i < n; i++) {
    name[i] = args[j++];
    score[i] = Integer.parseInt(args[j++]);
    total += score[i];
    }
    ここの部分のargs[i++]やargs[j++]ではどのような処理が行われているのですか??

    キャンセル

0

とりあえず 今週の木曜日に提示した同様(同一?)の質問の回答

質問的に課題とおもったから単純なコピペを避けるため
初期データの生成場所だけかえてありますが、計算は変更不要。formatは調整してください。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

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