无法计算下拉选择游戏的分数。

huangapple 未分类评论51阅读模式
英文:

Cant calculate score for dropdown selection game

问题

以下是您提供的代码的翻译部分:

package com.example.securityapp;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.analytics.FirebaseAnalytics;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.auth.UserProfileChangeRequest;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.MutableData;
import com.google.firebase.database.Transaction;
import com.google.firebase.database.ValueEventListener;
import com.google.firebase.database.core.Tag;

import java.util.ArrayList;
import java.util.Collections;

public class common_attacks_questions extends AppCompatActivity {

    DatabaseReference databaseUsers, databaseUsername;
    FirebaseDatabase database = FirebaseDatabase.getInstance();
    FirebaseAuth mAuth;
    TextView stmnt;
    Spinner answers;
    ImageView forward;
    Button points, finished;
    attacksStatements atStatements;
    int statementsLength;
    ArrayList<ItemWithOptions> statementList;
    int currentStatement = 0;
    int grade = 0;

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

        databaseUsers = database.getReference("Scores");
        databaseUsername = database.getReference("Users");

        mAuth = FirebaseAuth.getInstance();
        FirebaseUser user = mAuth.getCurrentUser();
        forward = (ImageView) findViewById(R.id.forward);
        answers = (Spinner) findViewById(R.id.dropDown);
        stmnt = (TextView) findViewById(R.id.statement_TV);
        atStatements = new attacksStatements();
        statementsLength = atStatements.attackStatements.length;
        statementList = new ArrayList<>();
        finished = (Button) findViewById(R.id.finish);
        points = (Button) findViewById(R.id.final_score);

        for (int i = 0; i < statementsLength; i++)
        {
            statementList.add(new ItemWithOptions(atStatements.getStatement(i), atStatements.getAnswer(i), atStatements.getOptions(i)));
        }
        Collections.shuffle(statementList);
        setStmnt(currentStatement);
        setOptions(currentStatement);
    }

    // 其他方法和代码保持不变,没有翻译变化
}

请注意,我只对您提供的Java代码进行了翻译,没有对其中的注释和变量名称进行翻译。如果您需要其他部分的翻译或解释,请随时提问。

英文:

Im making a game and the user has to select the missing work from a dropdown box. The user selects their choice and clicks next. However, I cant seem to calculate the score and when I get to the last question, the score is supposed to pop up in a dialog, but instead the app breaks?

Can anyone help me get the score to display without the app breaking?

Thanks 无法计算下拉选择游戏的分数。

Im getting these errors

> at com.example.securityapp.common_attacks_questions.setOptions(common_attacks_questions.java:107)
at com.example.securityapp.common_attacks_questions.nextClicked(common_attacks_questions.java:96)

<!-- begin snippet: js hide: false console: true babel: false -->

<!-- language: lang-js -->

package com.example.securityapp;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.analytics.FirebaseAnalytics;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.auth.UserProfileChangeRequest;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.MutableData;
import com.google.firebase.database.Transaction;
import com.google.firebase.database.ValueEventListener;
import com.google.firebase.database.core.Tag;

import java.util.ArrayList;
import java.util.Collections;

public class common_attacks_questions extends AppCompatActivity {

    DatabaseReference databaseUsers, databaseUsername;
    FirebaseDatabase database = FirebaseDatabase.getInstance();
    FirebaseAuth mAuth;
    TextView stmnt;
    Spinner answers;
    ImageView forward;
    Button points, finished;
    attacksStatements atStatements;
    int statementsLength;
    ArrayList&lt;ItemWithOptions&gt; statementList;
    int currentStatement = 0;
    int grade = 0;


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

        databaseUsers = database.getReference(&quot;Scores&quot;);
        databaseUsername = database.getReference(&quot;Users&quot;);

        mAuth = FirebaseAuth.getInstance();
        FirebaseUser user = mAuth.getCurrentUser();
        forward = (ImageView) findViewById(R.id.forward);
        answers = (Spinner) findViewById(R.id.dropDown);
        stmnt = (TextView) findViewById(R.id.statement_TV);
        atStatements = new attacksStatements();
        statementsLength = atStatements.attackStatements.length;
        statementList = new ArrayList&lt;&gt;();
        finished = (Button) findViewById(R.id.finish);
        points = (Button) findViewById(R.id.final_score);

        for (int i = 0; i &lt; statementsLength; i++)
        {
            statementList.add(new ItemWithOptions(atStatements.getStatement(i), atStatements.getAnswer(i), atStatements.getOptions(i)));

        }
        Collections.shuffle(statementList);
        setStmnt(currentStatement);
        setOptions(currentStatement);

    }


    public void nextClicked(View view) {
        if (checkAnswer(currentStatement)) {
            grade++;
        }
        currentStatement++;
        setOptions(currentStatement);
        if (currentStatement &gt;= statementsLength) {
            score();
            AlertDialog.Builder builder1 = new AlertDialog.Builder(this);
            builder1.setMessage(&quot;You scored &quot; + grade + &quot; points!&quot;).show();
            return;
        }
        if (currentStatement &lt;= statementsLength)
            setStmnt(currentStatement);
            setOptions(currentStatement);

    }

    //setOptions
    private void setOptions(int number)
    {
            ArrayAdapter&lt;String&gt; spinnerArrayAdapter = new ArrayAdapter&lt;String&gt;(this, android.R.layout.simple_spinner_item, statementList.get(number).getOptions());
            spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // The drop down view
            answers.setAdapter(spinnerArrayAdapter);
    }

    // show Statement
    private void setStmnt(int number) {
        stmnt.setText(statementList.get(number).getStatement());
    }



    //check is answer is right
    private boolean checkAnswer(int number) {
        String selection = answers.getSelectedItem().toString();
        String answer = statementList.get(number).getAnswer();
        if (selection == answer) {
            return answer.equals(true);
        }
        return false;
    }



    public void score() {


        String id = mAuth.getCurrentUser().getUid();
        DatabaseReference score = databaseUsers.child(id).child(&quot;Points&quot;);
        DatabaseReference order = databaseUsers.child(id).child(&quot;Order&quot;);
        DatabaseReference set_username = databaseUsers.child(id).child(&quot;Username&quot;);
        final DatabaseReference get_user_name = databaseUsername.child(id).child(&quot;username&quot;);
        FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

        final int pointsEarned = grade;


        order.runTransaction(new Transaction.Handler() {
            @Override
            public Transaction.Result doTransaction(@NonNull MutableData mutableData) {
                mutableData.setValue((mutableData.getValue() == null ? 0 : mutableData.getValue(Integer.class)) -pointsEarned);
                return Transaction.success(mutableData);
            }

            @Override
            public void onComplete(@Nullable DatabaseError databaseError, boolean b, @Nullable DataSnapshot dataSnapshot) {

            }
        });


        score.runTransaction(new Transaction.Handler() {
                                 @Override
                                 public Transaction.Result doTransaction(MutableData mutableData) {
                                     System.out.println(&quot;You scored: &quot; + pointsEarned);
                                     System.out.println(&quot;The current score is: &quot; + mutableData.getValue(Integer.class));
                                     mutableData.setValue((mutableData.getValue() == null ? 0 : mutableData.getValue(Integer.class)) + pointsEarned);
                                     System.out.println(&quot;The new score is: &quot; + mutableData.getValue(Integer.class));
                                     return Transaction.success(mutableData);
                                 }

                                 @Override
                                 public void onComplete(@Nullable DatabaseError databaseError, boolean b, @Nullable DataSnapshot dataSnapshot) {

                                 }
                             }
        );


        get_user_name.runTransaction(new Transaction.Handler() {
            @NonNull
            @Override
            public Transaction.Result doTransaction(@NonNull MutableData mutableData) {
                String name = mutableData.getValue(String.class);
                return Transaction.success(mutableData);
            }

            @Override
            public void onComplete(@Nullable DatabaseError databaseError, boolean b, @Nullable DataSnapshot dataSnapshot) {
                String username = dataSnapshot.getValue().toString();
                System.out.println(&quot;USERNAME: &quot; + username);


            }

        });

        set_username.runTransaction(new Transaction.Handler() {
            @NonNull
            @Override
            public Transaction.Result doTransaction(@NonNull MutableData mutableData) {

                mutableData.setValue(mAuth.getCurrentUser().getEmail());
                return Transaction.success(mutableData);

            }

            @Override
            public void onComplete(@Nullable DatabaseError databaseError, boolean b, @Nullable DataSnapshot dataSnapshot) {

            }
        });


        Toast.makeText(this, &quot;You scored &quot; + grade + &quot; points!&quot;, Toast.LENGTH_LONG).show();
        grade = 0;
    }






    public void FinishedOnClick (View view)
    {
        Intent intent_finished = new Intent(common_attacks_questions.this, industry_standards_rating_screen.class);
        startActivity(intent_finished);
        finish();
    }


}

<!-- end snippet -->

New Code which I can see it printing the correct answer and grade when I run it, but it breaks after the last one because of out of bounds....

<!-- begin snippet: js hide: false console: true babel: false -->

<!-- language: lang-js -->

package com.example.securityapp;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.analytics.FirebaseAnalytics;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.auth.UserProfileChangeRequest;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.MutableData;
import com.google.firebase.database.Transaction;
import com.google.firebase.database.ValueEventListener;
import com.google.firebase.database.core.Tag;

import java.util.ArrayList;
import java.util.Collections;

public class common_attacks_questions extends AppCompatActivity {

    DatabaseReference databaseUsers, databaseUsername;
    FirebaseDatabase database = FirebaseDatabase.getInstance();
    FirebaseAuth mAuth;
    TextView stmnt;
    Spinner answers;
    ImageView forward;
    Button points, finished;
    attacksStatements atStatements;
    int statementsLength;
    ArrayList&lt;ItemWithOptions&gt; statementList;
    int currentStatement = 0;
    int grade = 0;


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

        databaseUsers = database.getReference(&quot;Scores&quot;);
        databaseUsername = database.getReference(&quot;Users&quot;);

        mAuth = FirebaseAuth.getInstance();
        FirebaseUser user = mAuth.getCurrentUser();
        forward = (ImageView) findViewById(R.id.forward);
        answers = (Spinner) findViewById(R.id.dropDown);
        stmnt = (TextView) findViewById(R.id.statement_TV);
        atStatements = new attacksStatements();
        statementsLength = atStatements.attackStatements.length;
        statementList = new ArrayList&lt;&gt;();
        finished = (Button) findViewById(R.id.finish);
        points = (Button) findViewById(R.id.final_score);

        for (int i = 0; i &lt; statementsLength; i++)
        {
            statementList.add(new ItemWithOptions(atStatements.getStatement(i), atStatements.getAnswer(i), atStatements.getOptions(i)));

        }
        Collections.shuffle(statementList);
        setStmnt(currentStatement);
        setOptions(currentStatement);

    }

    //check is answer is right
    private boolean checkAnswer(int number) {
        String selection = answers.getSelectedItem().toString();
        String answer = statementList.get(number).getAnswer();
        System.out.println(selection + &quot; &quot; + answer);
        if (selection.equals(answer)) {
            System.out.println(&quot;This is the right answer&quot;);
            grade++;
            System.out.println(&quot;Your grade is &quot; + grade);
            return answer.equals(&quot;true&quot;);
        }

        return false;
    }


    public void nextClicked(View view) {
        
        checkAnswer(currentStatement);

        if (currentStatement &gt;= statementsLength) {
            score();
            AlertDialog.Builder builder1 = new AlertDialog.Builder(this);
            builder1.setMessage(&quot;You scored &quot; + grade + &quot; points!&quot;).show();
            return;
        }


        if (currentStatement &lt;= statementsLength ) {
            currentStatement++;
            setStmnt(currentStatement);
            setOptions(currentStatement);
        }
    }

    //setOptions
    private void setOptions(int number)
    {
        ArrayAdapter&lt;String&gt; spinnerArrayAdapter = new ArrayAdapter&lt;String&gt;(this, android.R.layout.simple_spinner_item, statementList.get(number).getOptions());
        spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // The drop down view
        answers.setAdapter(spinnerArrayAdapter);
    }

    // show Statement
    private void setStmnt(int number) {
        stmnt.setText(statementList.get(number).getStatement());
    }





    public void score() {


        String id = mAuth.getCurrentUser().getUid();
        DatabaseReference score = databaseUsers.child(id).child(&quot;Points&quot;);
        DatabaseReference order = databaseUsers.child(id).child(&quot;Order&quot;);
        DatabaseReference set_username = databaseUsers.child(id).child(&quot;Username&quot;);
        final DatabaseReference get_user_name = databaseUsername.child(id).child(&quot;username&quot;);
        FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

        final int pointsEarned = grade;


        order.runTransaction(new Transaction.Handler() {
            @Override
            public Transaction.Result doTransaction(@NonNull MutableData mutableData) {
                mutableData.setValue((mutableData.getValue() == null ? 0 : mutableData.getValue(Integer.class)) -pointsEarned);
                return Transaction.success(mutableData);
            }

            @Override
            public void onComplete(@Nullable DatabaseError databaseError, boolean b, @Nullable DataSnapshot dataSnapshot) {

            }
        });


        score.runTransaction(new Transaction.Handler() {
                                 @Override
                                 public Transaction.Result doTransaction(MutableData mutableData) {
                                     System.out.println(&quot;You scored: &quot; + pointsEarned);
                                     System.out.println(&quot;The current score is: &quot; + mutableData.getValue(Integer.class));
                                     mutableData.setValue((mutableData.getValue() == null ? 0 : mutableData.getValue(Integer.class)) + pointsEarned);
                                     System.out.println(&quot;The new score is: &quot; + mutableData.getValue(Integer.class));
                                     return Transaction.success(mutableData);
                                 }

                                 @Override
                                 public void onComplete(@Nullable DatabaseError databaseError, boolean b, @Nullable DataSnapshot dataSnapshot) {

                                 }
                             }
        );


        get_user_name.runTransaction(new Transaction.Handler() {
            @NonNull
            @Override
            public Transaction.Result doTransaction(@NonNull MutableData mutableData) {
                String name = mutableData.getValue(String.class);
                return Transaction.success(mutableData);
            }

            @Override
            public void onComplete(@Nullable DatabaseError databaseError, boolean b, @Nullable DataSnapshot dataSnapshot) {
                String username = dataSnapshot.getValue().toString();
                System.out.println(&quot;USERNAME: &quot; + username);


            }

        });

        set_username.runTransaction(new Transaction.Handler() {
            @NonNull
            @Override
            public Transaction.Result doTransaction(@NonNull MutableData mutableData) {

                mutableData.setValue(mAuth.getCurrentUser().getEmail());
                return Transaction.success(mutableData);

            }

            @Override
            public void onComplete(@Nullable DatabaseError databaseError, boolean b, @Nullable DataSnapshot dataSnapshot) {

            }
        });


        Toast.makeText(this, &quot;You scored &quot; + grade + &quot; points!&quot;, Toast.LENGTH_LONG).show();
        grade = 0;
    }






    public void FinishedOnClick (View view)
    {
        Intent intent_finished = new Intent(common_attacks_questions.this, industry_standards_rating_screen.class);
        startActivity(intent_finished);
        finish();
    }


}

<!-- end snippet -->

huangapple
  • 本文由 发表于 2020年4月7日 02:59:54
  • 转载请务必保留本文链接:https://java.coder-hub.com/61067047.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定