Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中传递数组以获得平均中值和模式_Java_Arrays_Mean_Mode_Median - Fatal编程技术网

在java中传递数组以获得平均中值和模式

在java中传递数组以获得平均中值和模式,java,arrays,mean,mode,median,Java,Arrays,Mean,Mode,Median,我正在尝试使用java传递数组,以获得java中的平均值、中值、模式、最大值和最小值。我目前在将数组传递给函数并返回其值以便输出结果时遇到问题。我相信我有正确的循环,以解决平均中位数和模式,但我不能让他们发送和接收想要的。如何传递数组并发回所需的值 更新:我已经更新了它将编译的代码,我可以输入年数,但在那之后我会出现几个错误。它也没有打印输出 线程“main”java.util.UnknownFormatConversionException中的异常:Conversion='i' 在java.u

我正在尝试使用java传递数组,以获得java中的平均值、中值、模式、最大值和最小值。我目前在将数组传递给函数并返回其值以便输出结果时遇到问题。我相信我有正确的循环,以解决平均中位数和模式,但我不能让他们发送和接收想要的。如何传递数组并发回所需的值

更新:我已经更新了它将编译的代码,我可以输入年数,但在那之后我会出现几个错误。它也没有打印输出

线程“main”java.util.UnknownFormatConversionException中的异常:Conversion='i' 在java.util.Formatter$FormatSpecifier.conversion(Formatter.java:2646) 位于java.util.Formatter$FormattSpecifier(Formatter.java:2675) 位于java.util.Formatter.parse(Formatter.java:2528) 位于java.util.Formatter.format(Formatter.java:2469) 位于java.io.PrintStream.format(PrintStream.java:970) 位于java.io.PrintStream.printf(PrintStream.java:871) la5cs1110_woodspl_03.pkg17.pkg2016.la5cs1110_woodspl_03172016.main(la5cs1110_woodspl_03172016.java:56) Java结果:1

    public static void main(String[] args) {
        int i;
        List<Double> hArray = new ArrayList<>();
        int nYears = 0, y = 0;
        double rMax = 0.00,rMin = 100.00;


        //get input check if between 1-80
        while(y == 0){
        String userData = JOptionPane.showInputDialog
                                   ("Enter number of years");
        nYears = Integer.parseInt(userData);

        if (nYears > 1 && nYears <= 80 )
           y = 1;

        }


        y = 0;
        while(y <= nYears){ 
            for(i = 0; i < 12; i++){
                Random rand = new Random();
                double rNum = rand.nextFloat() * (rMax - rMin) + rMin;
                 hArray.add(rNum);
            }
                double mean = getMean (hArray);
                double median = getMedian (hArray);
                double mode = getMode (hArray);
                double max = getMaxValue(hArray);
                double min = getMinValue (hArray);
           System.out.printf("In year %i the Mean = %d , mode = %d, median = %d," +
                  " max = %d, min = %d", y , mean, median, mode, max, min);
            y++;
        }

    }
    private static double getMean(List<Double> hArray) {
    double sum = 0;
    for (int i = 0; i < hArray.size(); i++) {
        sum += hArray.get(i);
    }
    return sum / hArray.size();
}
    //Median
    private static double getMedian(List<Double> hArray) {
    int middle = hArray.size()/2;
    if (hArray.size() %2 == 1) {
        return hArray.get(middle);
    } else {
        return (hArray.get(middle-1) + hArray.get(middle)) / 2.0;
    }
}
    //Mode
    public static double getMode(List<Double> hArray) {
    double maxValue = 0, maxCount = 0;

    for (int i = 0; i < hArray.size(); ++i) {
        int count = 0;
        for (int j = 0; j < hArray.size(); ++j) {
            if (hArray.get(j) == hArray.get(i)) ++count;
        }
        if (count > maxCount) {
            maxCount = count;
            maxValue = hArray.get(i);
        }
    }

    return maxValue;
}
    public static double getMaxValue(List<Double> hArray){  
      double maxValue = hArray.get(0);  
      for(int i=1;i < hArray.size();i++){  
      if(hArray.get(i) > maxValue){  
      maxValue = hArray.get(i);  

         }  

     }  
         return maxValue; 
    }
    public static double getMinValue(List<Double> hArray){  
     double minValue = hArray.get(0);  
     for(int i=1;i<hArray.size();i++){  
     if(hArray.get(i) < minValue){  
     minValue = hArray.get(i);  
        }  
     }  
    return minValue;  
 }  


}
publicstaticvoidmain(字符串[]args){
int i;
List hArray=new ArrayList();
int nYears=0,y=0;
双rMax=0.00,rMin=100.00;
//如果介于1-80之间,则获取输入检查
而(y==0){
字符串userData=JOptionPane.showInputDialog
(“输入年数”);
nYears=Integer.parseInt(userData);
如果(nYears>1&&nYears最大值){
maxValue=hArray.get(i);
}  
}  
返回最大值;
}
公共静态双getMinValue(列表)
double minValue=hArray.get(0);

对于(int i=1;i您的
hArray
是一个列表。您应该首先将其转换为数组

getMean(hArray.toArray)

签出。

您的
hArray
是一个列表。您应该首先将其转换为数组

getMean(hArray.toArray)

签出。

将试图将单个元素从数组传递到统计函数的部分替换为使用整个数组的调用,并更改调用的签名,以便它们采用
列表
参数,而不是
双[]
。类似于以下内容:

   double mean = getMean (hArray);
   double median = getMedian (hArray);
   double mode = getMode (hArray);
   double max = getMaxValue(hArray);
   double min = getMinValue (hArray);

//Mean
private static double getMean(List<Double> hArray) {
    double sum = 0;
    for (int i = 0; i < hArray.size(); i++) {
        sum += hArray.get(i);
    }
    return sum / hArray.size();
}
double mean=getMean(哈雷);
双中位数=getMedian(哈雷);
双模式=getMode(哈雷);
double max=getMaxValue(哈雷);
双最小值=getMinValue(哈雷);
//卑鄙
私有静态双getMean(列表hArray){
双和=0;
对于(int i=0;i
另见:

中位数的固定值:

直接从上面的链接复制,稍作修改即可使用列表作为参数

public Double median(List<Double> list) 
{
   Double[] array = list.toArray(new Double[list.size()]);
   Arrays.sort(data);

   if (data.length % 2 == 0) 
   {
      return (data[(data.length / 2) - 1] + data[data.length / 2]) / 2.0;
   } 
   else 
   {
      return data[data.length / 2];
   }
}
公共双中位数(列表)
{
Double[]数组=list.toArray(新的Double[list.size()]);
数组。排序(数据);
if(data.length%2==0)
{
返回(data[(data.length/2)-1]+data[data.length/2])/2.0;
} 
其他的
{
返回数据[data.length/2];
}
}
修正模式:

public Double mode(List<Double> list) 
{
    java.util.TreeMap<Double,Integer> map = new java.util.TreeMap<>();
    Double maxVal = null;
    int maxCount = 0;

    for (Double d : list) {
        int count = 0;
        if (map.containsKey(d)) {
            count = map.get(d) + 1;
        } else {
            count = 1;
        }
        map.put(d, count);

        if (count > maxCount) {
           maxVal = d;
           maxCount = count;
        }
    }
    return maxVal;
}
公共双模式(列表)
{
java.util.TreeMap map=new java.util.TreeMap();
Double maxVal=null;
int maxCount=0;
用于(双d:列表){
整数计数=0;
if(集装箱图(d)){
count=map.get(d)+1;
}否则{
计数=1;
}
地图放置(d,计数);
如果(计数>最大计数){
maxVal=d;
最大计数=计数;
}
}
返回maxVal;
}

将试图将单个元素从数组传递到统计函数的部分替换为使用整个数组的调用,并更改调用的签名,以便调用采用
列表
参数,而不是
双[]
。类似于以下内容:

   double mean = getMean (hArray);
   double median = getMedian (hArray);
   double mode = getMode (hArray);
   double max = getMaxValue(hArray);
   double min = getMinValue (hArray);

//Mean
private static double getMean(List<Double> hArray) {
    double sum = 0;
    for (int i = 0; i < hArray.size(); i++) {
        sum += hArray.get(i);
    }
    return sum / hArray.size();
}
double mean=getMean(哈雷);
双中位数=getMedian(哈雷);
双模式=getMode(哈雷);
double max=getMaxValue(哈雷);
双最小值=getMinValue(哈雷);
//卑鄙
私有静态双getMean(列表hArray){
双和=0;
对于(int i=0;i
另见:

中位数的固定值:

直接从上面的链接复制,稍作修改即可使用列表作为参数

public Double median(List<Double> list) 
{
   Double[] array = list.toArray(new Double[list.size()]);
   Arrays.sort(data);

   if (data.length % 2 == 0) 
   {
      return (data[(data.length / 2) - 1] + data[data.length / 2]) / 2.0;
   } 
   else 
   {
      return data[data.length / 2];
   }
}
公共双中位数(列表)
{
Double[]数组=list.toArray(新的Double[list.size()]);
数组。排序(数据);
if(data.length%2==0)
{
返回(data[(data.length/2)-1]+data[data.length/2])/2.0;
} 
其他的
{
返回数据[data.length/2];
}
}
修正模式:

public Double mode(List<Double> list) 
{
    java.util.TreeMap<Double,Integer> map = new java.util.TreeMap<>();
    Double maxVal = null;
    int maxCount = 0;

    for (Double d : list) {
        int count = 0;
        if (map.containsKey(d)) {
            count = map.get(d) + 1;
        } else {
            count = 1;
        }
        map.put(d, count);

        if (count > maxCount) {
           maxVal = d;
           maxCount = count;
        }
    }
    return maxVal;
}
公共双模式(列表)
{
java.util.TreeMap map=new java.util.TreeMap();
Double maxVal=null;
int maxCount=0;
用于(双d:列表){
整数计数=0;
if(集装箱图(d)){
count=map.get(d)+1;
}否则{
计数=1;
}
地图放置(d,计数);
如果(计数>最大计数){
maxVal=d;
最大计数=计数;
}
}
返回maxVal;
}

这不会编译,您尝试将一个
双精度
传递给一个方法,该方法需要一个
双精度[]
。因此,您必须更改方法的参数并使用列表,只需传入
哈雷
(请参阅Tibrogargan答案-即,您必须修改每个实现)或执行以下操作:

  • 创建一个
    Double[]

    Double[] hArray2 = hArray.toArray(new Double[hArray.size()]);
    
    private static double getMean(Double[] hArray) { ...}
    
  • 更改您的方法的签名,使它们期望一个
    Double[]

    Double[] hArray2 = hArray.toArray(new Double[hArray.size()]);
    
    private static double getMean(Double[] hArray) { ...}
    
  • 通过
    hArray2
    而不是
    hArray

    double mean = getMean(hArray2);
    // ...
    

  • 应该是这样。

    这不会编译,您尝试将
    双精度
    传递给一个方法,该方法需要
    双精度[]
    。因此您必须更改参数