RockBearLTD
@RockBearLTD
Ленивый недопрограммист.

Почему мой говнокод не слушается моего велосипеда?

Собственно, вот код. Только упрощенный и сокращенный кол-вом строк раз в 10.
Подразумевает тест, в котором если больше ответов "А" - то результат один, а если больше ответов "B" - другой. Если одинаково - третий.
Я понимаю, что есть методы намного проще, но я пока лишь набираюсь опыта, и пошел методом нагромождения, но, зато, понятного мне.
//до метода onCreate
int q1A;
int q1B;
int q1C;
int q2A;
int q2B;
int q2C;
int q3A;
int q3B;
int q3C;
int q4A;
int q4B;
int q4C;
int ballA;
int ballB;
String resText;
...
//метод onClick, q1 - question1, a2 - answer 2.
RadioButton q1_a1 = (RadioButton) findViewById(R.id.q1_a1);
RadioButton q1_a2 = (RadioButton) findViewById(R.id.q1_a2);
RadioButton q2_a1 = (RadioButton) findViewById(R.id.q2_a1);
RadioButton q2_a2 = (RadioButton) findViewById(R.id.q2_a2);
RadioButton q3_a1 = (RadioButton) findViewById(R.id.q1_a3);
RadioButton q3_a2 = (RadioButton) findViewById(R.id.q1_a3);
RadioButton q4_a1 = (RadioButton) findViewById(R.id.q1_a4);
RadioButton q4_a2 = (RadioButton) findViewById(R.id.q1_a4);

if (q1_a1.isChecked()) q1A = 1; else q1A = 0;
if (q1_a2.isChecked()) q1B = 1; else q1B= 0;
if (q2_a1.isChecked()) q2A = 1; else q2A = 0;
if (q2_a2.isChecked()) q2B = 1; else q2B = 0;
if (q3_a1.isChecked()) q3A = 1; else q3A = 0;
if (q3_a2.isChecked()) q3B = 1; else q3B = 0;
if (q4_a1.isChecked()) q4A = 1; else q4A = 0;
if (q4_a2.isChecked()) q4B = 1; else q4B = 0;

ballA = q1A + q2A + q3A + q4A;
ballB = q1B + q2B + q3B + q4B;
int prover = ballA + ballB;

        if (prover < 4)
            resText = "Один или более вопросов остались без ответа. Пожалуйста, ответьте для достижения более точно результата.";
        else {
            if (ballA != ballB) {
                if (ballA > ballB)
                    resText = "Результат 1.";
                if (ballB > ballA)
                    resText = "Результат 2.";
            }
            if (ballA == ballB){
                if (ballA == ballB)
                    resText = "Среднее между результатом 1 и результатом 2.";
            }
        }
        TextView resulText = (TextView) findViewById(R.id.resultText);
        resultText.setText(resText);

Еще раз хочу напомнить, что некоторые вещи тут поменять нельзя, так как сам тест больше этого. Вопросов 5, в каждом по 4 варианта ответа. С условия добавляю "&&" и "||", так как сравнивать ответов надо больше, выводя по ним результат.
Но выводятся лишь средние результаты между разными целыми результатами (вариантов ответов то больше) в зависимости от выбранных флажков. Но если я выбираю флажки так, чтобы не было одинаковых чисел в результативном балле, и выбирался максимум, все равно выводится текст со средним результатом.
В ответы добавлю полный код, если не будет ничего понятно из короткого примера.

UPD: Нашел решение. Достаточно глупое, и совершенно не связано с самим кодом. Решение в ответах. Изменил полный код на правильный.
  • Вопрос задан
  • 364 просмотра
Решения вопроса 1
RockBearLTD
@RockBearLTD Автор вопроса
Ленивый недопрограммист.
Полный код. Решенный.
Проблема была в том, что сравнивая ответы, он засчитывал равными те, которые были равны нулю. И поэтому выводил не тот результат. Осталось добавить для промежуточных результатов лишь что-то вроде ballA != 0 в каждое условие, и проблема была разрешена. Протупил я, действительно.
//до метода onCreate
    String resText;
    int q1A;
    int q1B;
    int q1C;
    int q1D;
    int q2A;
    int q2B;
    int q2C;
    int q2D;
    int q3A;
    int q3B;
    int q3C;
    int q3D;
    int q4A;
    int q4B;
    int q4C;
    int q4D;
    int q5A;
    int q5B;
    int q5C;
    int q5D;
    int ballA;
    int ballB;
    int ballC;
    int ballD;
...
//метод onClick
    public void t17_getResult(View view) {

        RadioButton rb11 = (RadioButton) findViewById(R.id.t17_q1_a1);
        RadioButton rb12 = (RadioButton) findViewById(R.id.t17_q1_a2);
        RadioButton rb13 = (RadioButton) findViewById(R.id.t17_q1_a3);
        RadioButton rb14 = (RadioButton) findViewById(R.id.t17_q1_a4);
        RadioButton rb21 = (RadioButton) findViewById(R.id.t17_q2_a1);
        RadioButton rb22 = (RadioButton) findViewById(R.id.t17_q2_a2);
        RadioButton rb23 = (RadioButton) findViewById(R.id.t17_q2_a3);
        RadioButton rb24 = (RadioButton) findViewById(R.id.t17_q2_a4);
        RadioButton rb31 = (RadioButton) findViewById(R.id.t17_q3_a1);
        RadioButton rb32 = (RadioButton) findViewById(R.id.t17_q3_a2);
        RadioButton rb33 = (RadioButton) findViewById(R.id.t17_q3_a3);
        RadioButton rb34 = (RadioButton) findViewById(R.id.t17_q3_a4);
        RadioButton rb41 = (RadioButton) findViewById(R.id.t17_q4_a1);
        RadioButton rb42 = (RadioButton) findViewById(R.id.t17_q4_a2);
        RadioButton rb43 = (RadioButton) findViewById(R.id.t17_q4_a3);
        RadioButton rb44 = (RadioButton) findViewById(R.id.t17_q4_a4);
        RadioButton rb51 = (RadioButton) findViewById(R.id.t17_q5_a1);
        RadioButton rb52 = (RadioButton) findViewById(R.id.t17_q5_a2);
        RadioButton rb53 = (RadioButton) findViewById(R.id.t17_q5_a3);
        RadioButton rb54 = (RadioButton) findViewById(R.id.t17_q5_a4);

        if (rb11.isChecked()) q1A = 1; else q1A = 0;
        if (rb12.isChecked()) q1B = 1; else q1B = 0;
        if (rb13.isChecked()) q1C = 1; else q1C = 0;
        if (rb14.isChecked()) q1D = 1; else q1D = 0;
        if (rb21.isChecked()) q2A = 1; else q2A = 0;
        if (rb22.isChecked()) q2B = 1; else q2B = 0;
        if (rb23.isChecked()) q2C = 1; else q2C = 0;
        if (rb24.isChecked()) q2D = 1; else q2D = 0;
        if (rb31.isChecked()) q3A = 1; else q3A = 0;
        if (rb32.isChecked()) q3B = 1; else q3B = 0;
        if (rb33.isChecked()) q3C = 1; else q3C = 0;
        if (rb34.isChecked()) q3D = 1; else q3D = 0;
        if (rb41.isChecked()) q4A = 1; else q4A = 0;
        if (rb42.isChecked()) q4B = 1; else q4B = 0;
        if (rb43.isChecked()) q4C = 1; else q4C = 0;
        if (rb44.isChecked()) q4D = 1; else q4D = 0;
        if (rb51.isChecked()) q5A = 1; else q5A = 0;
        if (rb52.isChecked()) q5B = 1; else q5B = 0;
        if (rb53.isChecked()) q5C = 1; else q5C = 0;
        if (rb54.isChecked()) q5D = 1; else q5D = 0;

        ballA = q1A + q2A + q3A + q4A + q5A;
        ballB = q1B + q2B + q3B + q4B + q5B;
        ballC = q1C + q2C + q3C + q4C + q5C;
        ballD = q1D + q2D + q3D + q4D + q5D;
        int prover = ballA + ballB + ballC + ballD;

        if (prover < 5)
            resText = "Один или более вопросов остались без ответа. Пожалуйста, ответьте для достижения более точно результата.";
        else {
                if (ballA > ballB && ballA > ballC && ballA > ballD)
                    resText = "...Сангвиник...";
                if (ballB > ballA && ballB > ballC && ballB > ballD)
                    resText = "...Меланхолик...";
                if (ballC > ballA && ballC > ballB && ballC > ballD)
                    resText = "...Холерик...";
                if (ballD > ballA && ballD > ballB && ballD > ballC)
                    resText = "...Флегматик...";

                if (ballA != 0 && ballA == ballB)
                    resText = "...чем-то средним между сангвиником и меланхоликом...";
                if (ballB != 0 && ballB == ballC)
                    resText = "... чем-то средним между меланхоликом и холериком... ";
                if (ballC != 0 && ballC == ballD)
                    resText = "...чем-то средним между холериком и флегматиком...";
                if (ballD != 0 && ballD == ballA)
                    resText = "...чем-то средним между флегматиком и сангвиником....";
            }
        TextView mResText17 = (TextView) findViewById(R.id.t17_resText);
        mResText17.setText(resText);

    }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы