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