Android Studio, если ввод десятичный - PullRequest
0 голосов
/ 20 января 2020

Я программирую приложение, которое может рассчитывать оценки.

Но у меня возникла проблема:

Если вход в Edittext является десятичным, приложение вылетает. если число не является десятичным, оно не дает sh и дает правильный результат.

Вот код:

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


    final Button berechnenButton = (Button) findViewById(R.id.berechnenButton);

    final EditText note1 = (EditText) findViewById(R.id.note1);

    final EditText note2 = (EditText) findViewById(R.id.note2);

    final EditText note3 = (EditText) findViewById(R.id.note3);

    final EditText note4 = (EditText) findViewById(R.id.note4);

    final EditText wunsch = (EditText) findViewById(R.id.schnitt);

    final TextView ausgabe = (TextView) findViewById(R.id.ausgabe);



    note1.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);

    note2.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);

    note3.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);

    note4.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);

    wunsch.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);

    ausgabe.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);









    berechnenButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {





            if (note1.getText().toString().isEmpty()) {

                note1.setError("Dieses Feld darf nicht leer sein!");

            } else {


                if (note2.getText().toString().isEmpty()) {

                    note2.setError("Dieses Feld darf nicht leer sein!");

                } else {

                    if (wunsch.getText().toString().isEmpty()) {

                        wunsch.setError("Dieses Feld darf nicht leer sein!");

                    } else {

                        double note11 = Integer.parseInt(note1.getText().toString());
                        double note22 = Integer.parseInt(note2.getText().toString());
                        double wunsch1 = Integer.parseInt(wunsch.getText().toString());


                        if (note11 > 6) {

                            note1.setError("Die Note darf nicht grösser als 6 sein!");

                        } else {

                            if (note22 > 6) {

                                note2.setError("Die Note darf nicht grösser als 6 sein!");

                            } else {

                                if (wunsch1 > 6) {

                                    wunsch.setError("Die Note darf nicht grösser als 6 sein!");

                                } else {



                                    if (note3.getText().toString().isEmpty() && note4.getText().toString().isEmpty()) {




                                        double res = (-note11-note22+wunsch1*3);

                                        ausgabe.setText(String.valueOf(res));

                                    }


                                    if (!note3.getText().toString().isEmpty() && note4.getText().toString().isEmpty()) {

                                        double note33 = Integer.parseInt(note3.getText().toString());


                                        if (note33 > 6) {

                                            note3.setError("Die Note darf nicht grösser als 6 sein!");

                                        } else {



                                            double res = (-note11-note22-note33+wunsch1*4);

                                            ausgabe.setText(String.valueOf(res));


                                        }


                                    }


                                    if (!note3.getText().toString().isEmpty() && !note4.getText().toString().isEmpty()) {

                                        double note33 = Integer.parseInt(note3.getText().toString());
                                        double note44 = Integer.parseInt(note4.getText().toString());






                                        if (note33 > 6) {

                                            note3.setError("Die Note darf nicht grösser als 6 sein!");

                                        } else {

                                            if (note44 > 6) {

                                                note4.setError("Die Note darf nicht grösser als 6 sein!");

                                            } else {




                                                double res = (-note11-note22-note33-note44+wunsch1*5);

                                                ausgabe.setText(String.valueOf(res));

                                            }
                                        }
                                    }
                                }

                            }
                        }
                    }
                }
            }
        }
    });
}
}

Если кто-то знает, что я сделал неправильно, пожалуйста, запишите это ниже! Я был бы очень благодарен, b c Я очень новичок в программировании! :) Заранее спасибо!

С уважением, Дарио C.

Ответы [ 2 ]

0 голосов
/ 21 января 2020

Решение заключается в следующем:

Вы должны заменить это:

double note33 = Integer.parseInt(note3.getText().toString());

На:

Double note33 = Double.parseDouble(note3.getText().toString())

Спасибо Merthan за Решение!

0 голосов
/ 21 января 2020

Вы должны действительно предоставить информацию Cra sh (Исключение) в вопросах, потому что она облегчает поиск.

После просмотра вашего кода, я почти уверен, что причина для Cra sh это так:

double note33 = Integer.parseInt(note3.getText().toString());
double note44 = Integer.parseInt(note4.getText().toString());

Integer.parseInt выдает исключение, когда строка не может быть преобразована в целое число, в вашем случае 3 может быть преобразовано, но числа типа 3,345 не являются целыми числами, поэтому они вызывают the cra sh

Чтобы решить эту проблему, просто замените все эти вызовы следующим образом:

Double.parseDouble(note3.getText().toString())

Левая сторона уже верна

MfG: D

...