Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.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_Android_Arrays - Fatal编程技术网

Java平均值返回无穷大

Java平均值返回无穷大,java,android,arrays,Java,Android,Arrays,我的程序使用写操作保存一个double(ratingbar.rating),使用读操作将保存的文件放入数组中。然后,使用数组,我对数组中的数字进行平均。在read代码中,当我有getResources(“raw.file”)时工作正常,返回值正确,但现在我需要写数字,因此我不能使用res文件夹,所以现在我使用内部存储,我的平均值返回无穷大。在按钮侦听器中调用平均值。 我将发布代码: 写 阅读 在java中,如果分母为0.0(浮点或双精度为0),则除法等于无穷大。请在分割之前检查。在循环中有一个错

我的程序使用写操作保存一个double(ratingbar.rating),使用读操作将保存的文件放入数组中。然后,使用数组,我对数组中的数字进行平均。在read代码中,当我有getResources(“raw.file”)时工作正常,返回值正确,但现在我需要写数字,因此我不能使用res文件夹,所以现在我使用内部存储,我的平均值返回无穷大。在按钮侦听器中调用平均值。 我将发布代码:

阅读


在java中,如果分母为0.0(浮点或双精度为0),则除法等于无穷大。请在分割之前检查。

在循环中有一个错误,不要使用
a=i
,该错误导致(如果只有一个元素)
a=0
的结果为无穷大。使用
i+1
在每次迭代中添加
1

int i = 0;
for (i=0; i<array.size(); i++)
{
    total = total + array.get(i);
    // a=i;  // wrong
}
media = total / (i + 1);
return media;
inti=0;
对于(i=0;i
专用双媒体(ArrayListarray){
双倍合计=0;
双重媒体;
int a=array.size();//设置为数组的大小,而不是设置为i
对于(int i=0;i无穷大)
媒体=0;
其他的
媒体=总数/a;
返回媒体;
}

media=total/a;在该语句中a的值为0。这就是为什么无穷大。为什么?a将是array.size()-1,因为这是for循环中i的最后一个值。问题是a的初始值在这里很重要,saver是'a=array.size()'同意这一点。…在循环结束时使用
i+1
将为您节省一个变量现在有了…只需打开作用域…XDDDD当代码的其余部分…如果您在for循环之前初始化'i',则不需要声明变量…然后继续执行rest。列表中应该有多少项?因为可能是如果答案仅次于阅读问题。。。
private void readMyArray(ArrayList<Double>array){
    String ret = "";
    try {
        InputStream inputStream = openFileInput("myarray.txt");

        if (inputStream != null) {
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            String receiveString = "";
            StringBuilder stringBuilder = new StringBuilder();
            int enc = 0;
            while ((receiveString = bufferedReader.readLine()) != null) {
                stringBuilder.append(receiveString);
                array.add(enc, Double.parseDouble(receiveString));
                ++enc;
            }
            inputStream.close();
        }
    } catch (FileNotFoundException e) {
            e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
private double media(ArrayList<Double>array)
{
    double total = 0;
    double media;
    int a = 1;
    for (int i=0; i<array.size(); i++)
    {
        total = total + array.get(i);
        a=i;
    }
    media = total / a;
    return media;
}
button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            rating = ratingbar.getRating();

           writeMyArray(rating);
            readMyArray(arraydays);
            button.setText(getText(R.string.obrigado) + "!" + media(arraydays));
            //button.setText(getText(R.string.obrigado)+"!");
            ratingbar.setEnabled(false);
            button.setEnabled(false);
        }
    });
int i = 0;
for (i=0; i<array.size(); i++)
{
    total = total + array.get(i);
    // a=i;  // wrong
}
media = total / (i + 1);
return media;
private double media(ArrayList<Double>array){
    double total = 0;
    double media;
    int a = array.size(); // set to size of array, instead of setting to i
    for (int i=0; i<array.size(); i++) {
        total = total + array.get(i);
    }
    if(a==0) //if a == 0 // divide by 0 -> infinity
        media = 0;
    else
        media = total / a;
    return media;
}