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

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

ただいまの
回答率

90.62%

  • Java

    13476questions

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

  • 配列

    503questions

    配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

配列のプログラムについて

解決済

回答 2

投稿

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

silver_bulled

score 11

配列を使って最大値・最小値・平均値を求めるプログラムを作りたいのですが、うまく出力結果が出ません。(コンパイルは成功)

import java.util.Scanner;
public class MinMaxAve{
    public static void main(String[] args){
    System.out.println("数字を入力してください");
    Scanner kbd=new Scanner(System.in);
    int[] data=new int[1000];
    int min,max;//(左から)最小値・最大値
    double ave;//平均値
    int n=0;
    while(kbd.hasNext()){//hasNext()はリストに要素がなくなるまでtrueを返す
        data[n]=kbd.nextInt();
        n++;
    }
    if(n==0){
        System.out.println("データがありません");
    }else{
        min=data[0];
        for(int i=1;i<n;i++){
        if(data[i]<min){
            min=data[i];
        }
        System.out.printf("min=%d\n",min);
        }
    }
    if(n==0){
        System.out.println("データがありません");
    }else{
        max=data[0];
        for(int x=1;x>n;x++){
        if(data[x]>max){
            max=data[x];
        }
        System.out.printf("max=%d\n",max);
        }
    }
    if(n==0){
        System.out.println("データがありません");
    }else{
        int sum=0;//入力した要素(数字)の合計
        for(int y=0;y<data.length;y++){
        sum=data[y];
        }
        ave=sum/data.length;
        System.out.printf("ave=%d\n",ave);
    }
    }
}


実行結果
数字を入力してください
10
20
15
5
min=10
min=10
min=5
ave=Exception in thread "main" java.util.IllegalFormatConversionException: d != java.lang.Double
at java.util.Formatter$FormatSpecifier.failConversion(Formatter.java:4302)
at java.util.Formatter$FormatSpecifier.printInteger(Formatter.java:2793)
at java.util.Formatter$FormatSpecifier.print(Formatter.java:2747)
at java.util.Formatter.format(Formatter.java:2520)
at java.io.PrintStream.format(PrintStream.java:970)
at java.io.PrintStream.printf(PrintStream.java:871)
at MinMaxAve.main(MinMaxAve.java:46)

もう最後の方はよく分からず、if文を3回繰り返してしまいました。

どこをどう直せば良いのでしょうか。
よろしくお願いします。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

+3

ちなみに今はこんなことができたり。

import java.util.IntSummaryStatistics;
import java.util.Scanner;

public class MinMaxAve {

    public static void main(String[] args) {
        System.out.println("数字を入力してください");
        Scanner sc = new Scanner(System.in);
        IntSummaryStatistics statistics = new IntSummaryStatistics();
        while (sc.hasNextInt()) {
            statistics.accept(sc.nextInt());
        }
        if (statistics.getCount() == 0L) {
            System.out.println("データがありません");
            return;
        }
        System.out.println("max = " + statistics.getMax());
        System.out.println("min = " + statistics.getMin());
        System.out.println("ave = " + statistics.getAverage());
    }

}

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/09/08 14:10

    お答えいただきありがとうございます。
    ...初心者の私にはちょっと難しいワードがたくさんあってクラクラしちゃいます^^;

    キャンセル

  • 2017/09/08 16:37

    ワードは難しいですが、IntSummaryStatisticsが内部でやってることはLouiS0616さんのコードと大差ありません。

    キャンセル

checkベストアンサー

+2

エラーをしっかり読みましょう。フォーマット変換が不正だと言っています。
IllegalFormatConversionException 難しい英語じゃないはずです。

問題の行はここです。

System.out.printf("ave=%d\n",ave);

書式指定子が違います。
そもそも、こう書けばよいと思うのですが。

System.out.println("ave=" + ave);

もう最後の方はよく分からず、if文を3回繰り返してしまいました。

難しく考えすぎなんじゃないですか?全部まとめて処理すればよいです。

if(n == 0){
    System.out.println("データがありません");
} 
else {
    int sum, min, max;
    double ave;
    sum = min = max = data[0];

    for(int i = 1; i < n; i++) {
        if(data[i] < min){
            min = data[i];
        }
        else if(data[i] > max) {
            max = data[i];
        }

        sum += data[i];
    }

    ave = 1.0 * sum / n;
    System.out.println("min=" + min);
    System.out.println("max=" + max);
    System.out.println("ave=" + ave);
}

動作確認はしていません。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/09/06 18:33

    ご指摘ありがとうございます。
    先ほどのバグ(?)は解消されたのですが、出力結果に数字が表示されなくなりました。(min=max=ave= と表示されます)
    よろしければまた教えていただけないでしょうか。

    キャンセル

  • 2017/09/06 18:36

    修正後のコードを載せてください。

    キャンセル

  • 2017/09/06 18:42 編集

    失礼しました、回答のコードに間違いがありました。
    取り急ぎ修正します。... 修正しました。

    キャンセル

  • 2017/09/06 19:35

    正しく出力されました!
    お手数をおかけして申し訳ございませんでした...
    本当にありがとうございました。

    キャンセル

  • 2017/09/07 10:49

    これsumにdata[0]が加算されていないのでは?
    int sum = data[0];
    のように初期化するべきでは。

    キャンセル

  • 2017/09/07 13:11

    > swordone様
    おっしゃる通りです。コードを修正しました。

    キャンセル

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

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

関連した質問

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

  • Java

    13476questions

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

  • 配列

    503questions

    配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。