2016-06-27 7 views
-4

基本このプログラムは、ユーザーから入力6の数字を受け取り、それらを配列に格納し、平均とモードを計算します。また、平均よりも多くの数を数えます。 私のプログラムのコードは私が間違っているところですどのようにしてアレイ内のモードを見つけることができますか?

私の平均は正しいですが、私はモードで問題があります。

パッケージp18;

import java.util.Arrays; import java.util.Scanner;

public class P18 { 

public static void main(String[] args) { 

Scanner S=new Scanner(System.in); 
    int[] arr1=new int [6]; 
    for (int i = 0; i < 6; ++i) { 
     int g = S.nextInt(); 
      arr1[i] = g; 
    } 

    int input=6; 

    double total=0d; 
    double mean; 

    for(int i=0;i<input;i++) 
    { 
    total=total+arr1[i]; 
    } 
    mean= total/input; 

    System.out.println("the mean is:" + mean); 

PROBLEM STARTS FROM HERE MODE PORTION 


    int max=0;//problem starts from here 
    int maxFreq=0; 

    Arrays.sort(arr1); 

    max = arr1[arr1.length-1]; 

    int[] count = new int[max + 1]; 

    for (int i = 0; i < arr1.length; i++) { 
    count[arr1[i]]++; 
} 

for (int i = 0; i < count.length; i++) { 
    if (count[i] > maxFreq) { 
     maxFreq = count[i]; 
    } 
} 

for (int i = 0; i < count.length; i++) { 
    if (count[i] == maxFreq) { 
     return i; 
    }} 
return -1; 
    }} 
+0

http://stackoverflow.com/questions/1053843/get-the-element-with-the-highest-occurrence-in-an-array –

答えて

1

入力を配列にまったく格納していません。あなたは、ユーザーの入力を保存するために、次のようなものを追加する必要があります:あなたは平均の小数点値を得ることができるように

Scanner S=new Scanner(System.in); 
int[] arr1=new int [6]; 
for (int i = 0; i < 6; ++i) { 
    int g = S.nextInt(); 
    arr1[i] = g; 
} 

int input=6; 

double total=0d; 
double mean; 

for(int i=0;i<input;i++) 
{ 
    total=total+arr1[i]; 
} 
mean= total/input; 

System.out.println("the mean is:" + mean); 

は私もダブルスに平均と合計を変更し、それ以外の場合は切り捨てます。

+0

dcodに感謝します。 –

0

あなたがユーザーにお願いしたいと思います、そしてあなたが平均をしたい場合は、floatまたはdoubleを使用する必要があるすべての番号をお願いしなければなりません。

Scanner S = new Scanner(System.in); 
double mean, total; 
double input = 6; 
double arr1 = new double[input]; 


for (int i = 0;i<input;++i){ 
    arr[i] = S.nextDouble(); 
} 

for(int i=0;i<input;i++) 
{ 
total=total+arr1[i]; 
} 
mean= total/input; 

System.out.println("the mean is:" + mean); 
+0

合計は整数でもかまいませんが –

+0

平均'double'ではなくint型の整数を使用します。そしてそれは同じコードです –

+0

平均ができない場合でも合計はまだintになります。入力が倍精度(または実数)である限り、整数除算は実行されないので、入力と平均のみが小数部を必要とする可能性があります。 –

0

ここで、6つの整数を読んでいると思いますか? S.nextInt()は一度だけ呼び出し、戻り値は使用しません。これはループ内で複数の入力を読み込んで何かを行うために行う必要があります。

0

平均の検索は簡単です。他の答えはそれをカバーしています。

また、ループを使用して配列の6つの値を収集し、それらの値すべてに対してnextInt()を呼び出す必要があります。

難しい部分はモードかもしれません。私がこのモードで解決する方法は次のとおりです。

1)配列をソートします。

2)現在のモードの値を保持するint型と、そのモードの出現回数を保持するint型を作成します。また、カウンターintが必要です。

3)ループを使用して、ソートされた配列を実行します。配列内のすべての数値について、発生した回数を数えます。それはソートされた順序であるため、値が変更されるたびに、あなたはその値のすべてを数えたことを知っています。オカレンスが現在の最大オカレンスよりも大きいかどうかを確認し、オカレンスがオカレンスである場合は、オカレンス値とモード値を変更します。

+0

あなたの提案に基づいてコードをチェックしてください。どこが間違っていますか? –

関連する問題