Android Studio:这个写/读代码出了什么问题?

时间:2015-07-07 08:02:17

标签: java android

我要用保存的双值进行平均值,我得到一个评级栏。当用户按下一个按钮时,我的应用程序会保存评级栏编号(双倍)并做一个平均值我有一个List(读取代码本身),我用文件中的双值填充。问题是平均回报,因为它返回NaN。我认为我的问题是写代码,因为NaN“意味着”我正在进行除以0.我是初学者,这意味着当我查看代码时我看不到错误,很抱歉,问题很容易解决。我现在将显示代码(对不起任何错误,我不经常写英文)。

写入/读取代码(该文件名为asdfg.txt,因为它给了我错误,所以如果它解决了,我会改变它。)

private void writeMyArray(double rate) {

    try(PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("asdfg.txt", true)))) {
        out.println(Double.toString(rate));
    }catch (IOException e) {
        //exception handling left as an exercise for the reader
    }

}


private List<Double> readMyArray() {

    List<Double> list = new ArrayList<Double>();
    try {
        Scanner s = new Scanner(new FileInputStream("asdfg.txt"), "utf-8");
        while (s.hasNextLine()) {
            list.add(Double.parseDouble(s.nextLine()));
        }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    return list;
}

平均值(媒体表示我母语的平均值):

private double media(List<Double> rateList) {
    double averageRating = 0;
    for (double r : rateList) {
        averageRating = averageRating + r;
    }
        return averageRating / rateList.size();
}

按钮代码(readFromFile()返回评级栏,我正在写入列表两次,因为它是一个列表,我想把更多的值放在那里,只是为了测试,当我完成这个我会写的时候一次):

 button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            rating = ratingbar.getRating();
            writeToFile(Double.toString(rating));
            writeMyArray(Double.parseDouble(readFromFile()));
            writeMyArray(ratingbar.getRating());
            button.setText(getText(R.string.obrigado) + "!" + media(readMyArray()));
        }
    });´

已编辑:因为已请求,我正在发布活动代码和资源:

活动(没有添加导入,太多)

public class MainActivity extends ActionBarActivity {
Toolbar toolbar;
TextView textView;
double rating;
public Button button;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final RatingBar ratingbar = (RatingBar) findViewById(R.id.ratingBar);
    button = (Button) findViewById(R.id.button);

    button.setText(getText(R.string.ultimo) + " " + readFromFile());

    ratingbar.setEnabled(true);
    rating = 0;
    textView = (TextView) findViewById(R.id.textView2);
    toolbar = (Toolbar) findViewById(R.id.app_bar);
    setSupportActionBar(toolbar);
    TextView comodia = (TextView) findViewById(R.id.comodia);
    comodia.setText(getText(R.string.notification_text));



    ratingbar.setOnRatingBarChangeListener(new RatingBar.OnRatingBarChangeListener() {
        @Override
        public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {
            button.setText(getText(R.string.votar) + ":");
            button.setEnabled(true);
        }
    });


    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            rating = ratingbar.getRating();
            writeToFile(Double.toString(rating));
            writeMyArray(Double.parseDouble(readFromFile()));
            writeMyArray(ratingbar.getRating());
            button.setText(getText(R.string.obrigado) + "!" + readFromFile() + " " + media(readMyArray()));

        }
    });


}


private void writeToFile(String data) {
    try {
        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(openFileOutput("estrela.txt", Context.MODE_PRIVATE));
        outputStreamWriter.write(data);
        outputStreamWriter.close();


    } catch (IOException e) {
        Log.e("Exception", "File write failed: " + e.toString());
    }
}


private String readFromFile() {

    String ret = "";

    try {
        InputStream inputStream = openFileInput("estrela.txt");

        if (inputStream != null) {
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            String receiveString = "";
            StringBuilder stringBuilder = new StringBuilder();

            while ((receiveString = bufferedReader.readLine()) != null) {
                stringBuilder.append(receiveString);
            }

            inputStream.close();
            ret = stringBuilder.toString();
        }
    } catch (FileNotFoundException e) {
        Log.e("login activity", "File not found: " + e.toString());
    } catch (IOException e) {
        Log.e("login activity", "Can not read file: " + e.toString());
    }

    return ret;
}


private void writeMyArray(double rate) {

    try(PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("asdfg.txt", true)))) {
        out.println(Double.toString(rate));
    }catch (IOException e) {
        //exception handling left as an exercise for the reader
    }

}


private List<Double> readMyArray() {

    List<Double> list = new ArrayList<Double>();
    try {
        Scanner s = new Scanner(new FileInputStream("asdfg.txt"), "utf-8");
        while (s.hasNextLine()) {
            list.add(Double.parseDouble(s.nextLine()));
        }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    return list;
}





private double media(List<Double> rateList) {
    double averageRating = 0;
    for (double r : rateList) {
        averageRating = averageRating + r;
    }
    if (averageRating == 0) {
        return 189;
    } else {
        return averageRating / (double)rateList.size();
    }

}


@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        onCreate(null);
        return true;
    }

    return super.onOptionsItemSelected(item);
}

}

RES /字符串:

<resources>
<string name="app_name">Day Rating</string>
<string name="hello_world">Hello world!</string>
<string name="action_settings">Settings</string>
<string name="segunda">Hoje é segunda-feira!</string>
<string name="terca">Hoje é terça-feira!</string>
<string name="quarta">Hoje é quarta-feira!</string>
<string name="quinta">Hoje é quinta-feira!</string>
<string name="sexta">Hoje é sexta-feira!</string>
<string name="sabado">Hoje é sábado!</string>
<string name="domingo">Hoje é domingo!</string>
<string name="bomdia">Bom dia</string>
<string name="notification_text">Como está a ser o seu dia?</string>
<string name="notification_ticker">Como se sente?</string>
<string name="ultimo">Último</string>
<string name="votar">Votar</string>
<string name="obrigado">Obrigado</string>

0 个答案:

没有答案