यहाँ त्रुटि है जो लॉग में दिखाई देती है:

2020-11-09 08:39:44.056 21967-21967/com.example.braintrainer E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.braintrainer, PID: 21967
    java.lang.IllegalStateException: Could not execute method for android:onClick
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:414)
        at android.view.View.performClick(View.java:7448)
        at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:992)
        at android.view.View.performClickInternal(View.java:7425)
        at android.view.View.access$3600(View.java:810)
        at android.view.View$PerformClick.run(View.java:28305)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:409)
        at android.view.View.performClick(View.java:7448) 
        at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:992) 
        at android.view.View.performClickInternal(View.java:7425) 
        at android.view.View.access$3600(View.java:810) 
        at android.view.View$PerformClick.run(View.java:28305) 
        at android.os.Handler.handleCallback(Handler.java:938) 
        at android.os.Handler.dispatchMessage(Handler.java:99) 
        at android.os.Looper.loop(Looper.java:223) 
        at android.app.ActivityThread.main(ActivityThread.java:7656) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 
     Caused by: java.lang.IllegalArgumentException: bound must be positive
        at java.util.Random.nextInt(Random.java:388)
        at com.example.braintrainer.MainActivity.generateQuestion(MainActivity.java:69)
        at com.example.braintrainer.MainActivity.checkAnswer(MainActivity.java:85)
        at com.example.braintrainer.MainActivity.pressOpt1(MainActivity.java:95)
        at java.lang.reflect.Method.invoke(Native Method) 
        at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:409) 
        at android.view.View.performClick(View.java:7448) 
        at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:992) 
        at android.view.View.performClickInternal(View.java:7425) 
        at android.view.View.access$3600(View.java:810) 
        at android.view.View$PerformClick.run(View.java:28305) 
        at android.os.Handler.handleCallback(Handler.java:938) 
        at android.os.Handler.dispatchMessage(Handler.java:99) 
        at android.os.Looper.loop(Looper.java:223) 
        at android.app.ActivityThread.main(ActivityThread.java:7656) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 

यहाँ फ़ंक्शन का मेरा जावा कोड है जो त्रुटि का कारण बनता है: यह मूल रूप से एक ब्रेन ट्रेनर ऐप है जो गणित के प्रश्न उत्पन्न करता है और आपको चुनने के लिए चार विकल्प देता है। आप एक विकल्प चुनते हैं, और फिर अगला प्रश्न दिखाई देता है।

चार प्रेसऑप्ट विधियाँ स्क्रीन पर चार बटन हैं जो उत्तर के लिए विकल्प प्रदर्शित करती हैं।

public void generateQuestion () {
        Button answer1 = (Button) findViewById(R.id.optionOne);
        Button answer2 = (Button) findViewById(R.id.optionTwo);
        Button answer3 = (Button) findViewById(R.id.optionThree);
        Button answer4 = (Button) findViewById(R.id.optionFour);
        TextView scores = (TextView) findViewById(R.id.scoreView);

        qAnswered++;

        scores.setText(Integer.toString(score) + "/" + Integer.toString(qAnswered));


        ArrayList<Button> buttons = new ArrayList<>(asList(answer1, answer2, answer3, answer4));
        int a, b;
        Random rand = new Random();
        int upperbound = 10;
        upperbound = rand.nextInt(50);
        while (upperbound < 2)
            upperbound = rand.nextInt(50);
        Log.i("upperbound", Integer.toString(upperbound));
        a = rand.nextInt(upperbound);
        upperbound = rand.nextInt(50);
        b = rand.nextInt(upperbound);
        answer = a + b;
        Log.i("a", Integer.toString(a));
        Log.i("b", Integer.toString(b));
        TextView question = (TextView) findViewById(R.id.questionView);
        question.setText(Integer.toString(a) + " + " + Integer.toString(b));
        int id = rand.nextInt(4);
        buttons.get(id).setText(Integer.toString(answer));
        for ( int i = 0; i<4; i++) {
            if ( i != id)
            {
                upperbound = rand.nextInt(50);
                while (upperbound < 2)
                    upperbound = rand.nextInt(50);

                int Fa = rand.nextInt(upperbound);
                upperbound = rand.nextInt(50);
                int Fb = rand.nextInt(upperbound);
                int falseAnswer = Fa + Fb;
                buttons.get(i).setText(Integer.toString(falseAnswer));
            }
        }

    }

    public void checkAnswer (boolean answerIs) {
        if (answerIs) {
           //correct
            score++;
        }
        else {
            //incorrect
        }
        generateQuestion();
    }

    public void pressOpt1 (View view) {
        Button answer1 = (Button) findViewById(R.id.optionOne);
        if (Integer.toString(answer).equals(answer1.getText()))
        {
            checkAnswer(true);
        }
        else {
            checkAnswer(false);
        }
    }

    public void pressOpt2 (View view) {
        Button answer1 = (Button) findViewById(R.id.optionTwo);
        if (Integer.toString(answer).equals(answer1.getText()))
        {
            checkAnswer(true);
        }
        else {
            checkAnswer(false);
        }
    }

    public void pressOpt3 (View view) {
        Button answer1 = (Button) findViewById(R.id.optionThree);
        if (Integer.toString(answer).equals(answer1.getText()))
        {
            checkAnswer(true);
        }
        else {
            checkAnswer(false);
        }
    }

    public void pressOpt4 (View view) {
        Button answer1 = (Button) findViewById(R.id.optionFour);
        if (Integer.toString(answer).equals(answer1.getText()))
        {
            checkAnswer(true);
        }
        else {
            checkAnswer(false);
        }
    }
-2
Divya Soni 9 नवम्बर 2020, 07:53

1 उत्तर

सबसे बढ़िया उत्तर

मुझे लगता है कि ऐसा तब होता है जब आपका यादृच्छिक रिटर्न 0 होता है और आप अगले ऊपरी बाउंड के रूप में 0 का उपयोग करते हैं।

दो अवसरों में आप सुनिश्चित करते हैं कि ऊपरी सीमा> 2 है, लेकिन अन्य में आप नहीं करते हैं।

मेरा सुझाव है कि आप सभी अवसरों को इसमें बदल दें:

do { upperbound = rand.nextInt(50); }
while (upperbound < 2)

यह सुनिश्चित करने के लिए हर जगह

1
Tobi 9 नवम्बर 2020, 07:34