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

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

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

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

Q&A

解決済

3回答

5147閲覧

乱数のプログラムから平均値を求めるプログラムをつくっていますが、上手くいきません

prog1717nm

総合スコア56

Java

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

0グッド

0クリップ

投稿2016/07/03 02:31

以下は乱数のプログラムから、最大値と最小値と平均値を求めるプログラムです。メソッドの引数に配列を書いています。
乱数のプログラムとこのプログラムはパイプでつなぎます。

import java.util.Scanner; public class Max_Min_Ave { public static void main(String[] args) { int[] data = new int[10000]; int n = load(data); System.out.printf("Max = %d\n", Max(data,n)); System.out.printf("Min = %d\n", Min(data,n)); System.out.printf("Ave = %f10\n", Ave(data,n)); } static int load(int[] data) { Scanner stdin = new Scanner(System.in); int n=0; while(stdin.hasNext()) { data[n]=stdin.nextInt(); n++; } return n; } static int Max(int[] data, int n) { int max=Integer.MIN_VALUE; for(int i=0; i<n; i++) if(max<data[i]) max = data[i]; return max; } static int Min(int[] data, int n) { int min=Integer.MAX_VALUE; for(int i=0; i<n; i++) if(min>data[i]) min=data[i]; return min; } static double Ave(int[] data, int n,int s) { for(int i=0; i<n; i++) s=s+data[i]; return s/n; } }

実行結果はエラーで、
クラス Max_Min_Aveのメソッド Aveは指定された型に適用できません。
System.out.printf("Ave = %f10\n", Ave(data,n));
^
期待値: int[],int,int
検出値: int[],int
理由: 実引数リストと仮引数リストの長さが異なります
エラー1個

と出ました。間違っているのは、平均を求める部分だというのは分かっているんですが、どう直していいか困っています。よろしくお願いします。

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

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

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

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

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

guest

回答3

0

理由: 実引数リストと仮引数リストの長さが異なります

実引数は、Ave を呼び出している部分 Ave(data,n) です。
仮引数は、Ave を宣言している部分 double Ave(int[] data, int n,int s) です。

Ave を次のように変更すれば良いと思います。

java

1 static double Ave(int[] data, int n) { 2 double s = 0.0; 3 for (int i = 0; i < n; i++) { 4 s += data[i]; 5 } 6 return s / n; 7 }

参考として、data を int[] でなく、ArrayList をつかった版を書いてみました。
関数の引数の数を減らすことができています。

java

1import java.util.ArrayList; 2import java.util.List; 3import java.util.Scanner; 4 5public class Max_Min_Ave { 6 public static void main(String[] args) { 7 List<Integer> data = load(); 8 if (data.size() == 0) { 9 System.out.printf("データがありません。"); 10 } else { 11 System.out.printf("Max = %d\n", Max(data)); 12 System.out.printf("Min = %d\n", Min(data)); 13 System.out.printf("Ave = %f\n", Ave(data)); 14 } 15 } 16 17 static List<Integer> load() { 18 List<Integer> data = new ArrayList<Integer>(); 19 Scanner stdin = new Scanner(System.in); 20 while (stdin.hasNext()) { 21 data.add(stdin.nextInt()); 22 } 23 stdin.close(); 24 return data; 25 } 26 27 static int Max(List<Integer> data) { 28 int max = Integer.MIN_VALUE; 29 for (int i : data) { 30 if (max < i) { 31 max = i; 32 } 33 } 34 return max; 35 } 36 37 static int Min(List<Integer> data) { 38 int min = Integer.MAX_VALUE; 39 for (int i : data) { 40 if (min > i) { 41 min = i; 42 } 43 } 44 return min; 45 } 46 47 static double Ave(List<Integer> data) { 48 double s = 0.0; 49 for (int i : data) { 50 s += i; 51 } 52 return s / data.size(); 53 } 54 55}

投稿2016/07/03 04:01

katoy

総合スコア22324

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

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

0

Aveの引数が3つ必要な風に書いてませんか?
で実査に使っているところでは引数が2つです。そこが問題なのでは?

投稿2016/07/03 02:39

array

総合スコア57

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

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

0

ベストアンサー

仮引数の「s」の意味が分かりません。

一次的に総和を格納するならばローカル変数としてゼロで初期化する必要があります。

投稿2016/07/03 02:38

HogeAnimalLover

総合スコア4830

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問