Android Studio [Java]: кнопка аварийно завершает работу эмулятора, а другая кнопка всегда выводит ноль - PullRequest
0 голосов
/ 14 апреля 2019

спасибо, что посетили мой вопрос.В настоящее время я создаю Hangman на Android Studio Java, и одна из моих кнопок, скорее всего, неправильно закодирована, а другая всегда выводит ноль.

Это мой текущий код для моей основной деятельности:

import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.Arrays;
import java.util.List;

import static java.lang.String.valueOf;

public class MainScreen extends AppCompatActivity {

    Intent n = getIntent();

    public ImageView hm1img;
    public ImageView hm2img;
    public ImageView hm3_1img;
    public ImageView hm3_2img;
    public ImageView hm4img;
    public ImageView hmBodyHead;
    public ImageView hmBodyMain;
    public ImageView hmBodyArm1;
    public ImageView hmBodyArm2;
    public ImageView hmLeg1_1;
    public ImageView hmLeg1_2;
    public ImageView hmLeg2_1;
    public ImageView hmLeg2_2;

    public TextView wordDisplay;
    public TextView incorrect;
    public TextView iL;
    public TextView verify;

    public EditText guessLetter;
    public Button bCheck;

    public TextView chooseYourWord;
    public EditText enterWord;
    public Button bContinue;
    public Button bStart;
    public Button bLoad;

    List<String> word;
    String guessedLetter;

    String otherWord;

    int wordLength = (String.valueOf(word)).length();

    int dashCounter;

    List<String> letters;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_screen);
        hm1img = findViewById(R.id.hm1img);
        hm2img = findViewById(R.id.hm2img);
        hm3_1img = findViewById(R.id.hm3_1img);
        hm3_2img = findViewById(R.id.hm3_2img);
        hm4img = findViewById(R.id.hm4img);
        hmBodyArm1 = findViewById(R.id.hmBodyArm1);
        hmBodyArm2 = findViewById(R.id.hmBodyArm2);
        hmBodyHead = findViewById(R.id.hmBodyHead);
        hmBodyMain = findViewById(R.id.hmBodyMain);
        hmLeg1_1 = findViewById(R.id.hmLeg1_1);
        hmLeg1_2 = findViewById(R.id.hmLeg1_2);
        hmLeg2_1 = findViewById(R.id.hmLeg2_1);
        hmLeg2_2 = findViewById(R.id.hmLeg2_2);
        wordDisplay = findViewById(R.id.wordDisplay);
        incorrect = findViewById(R.id.incorrect);
        iL = findViewById(R.id.iL);
        verify = findViewById(R.id.verify);
        guessLetter = findViewById(R.id.guessLetter);
        bCheck = findViewById(R.id.bCheck);
        chooseYourWord = findViewById(R.id.chooseYourWord);
        enterWord = findViewById(R.id.enterWord);
        bContinue = findViewById(R.id.bContinue);
        bStart = findViewById(R.id.bStart);
        bLoad = (Button) findViewById(R.id.bLoad);


        dashCounter = 0;
        while (dashCounter > wordLength) {
            letters.add("_");
            dashCounter++;
        }
    }

    public void bContinueClick(View view) {
        word = Arrays.asList(("".split(valueOf(enterWord.getText()))));
        chooseYourWord.setVisibility(View.INVISIBLE);
        enterWord.setVisibility(View.INVISIBLE);
        bContinue.setVisibility(View.INVISIBLE);
        bStart.setVisibility(View.VISIBLE);
    }



    public void bStartClick(View view) {
        bStart.setVisibility(View.INVISIBLE);
        wordDisplay.setVisibility(View.VISIBLE);
        incorrect.setVisibility(View.VISIBLE);
        iL.setVisibility(View.VISIBLE);
        verify.setVisibility(View.VISIBLE);
        guessLetter.setVisibility(View.VISIBLE);
        bCheck.setVisibility(View.VISIBLE);
        guessedLetter = valueOf(guessLetter.getText());
        bLoad.setVisibility(View.VISIBLE);
    }

    @RequiresApi(api = Build.VERSION_CODES.O)
    public void bLoadClick(View view) {
        wordDisplay.setText(String.valueOf(letters));

        if (wordDisplay.getText() == (null)) {
            for (int i = 0; i < wordLength; i++) {
                wordDisplay.append("_");
            }
        }
    }


    @RequiresApi(api = Build.VERSION_CODES.O)
    public void bCheckClick(View view) {
        guessedLetter = valueOf(guessLetter.getText());
        word = Arrays.asList(("".split(String.valueOf(word))));
        if(word.indexOf(guessedLetter) != -1) {
            letters.get(word.indexOf(guessedLetter)).equals(word.get(word.indexOf(guessedLetter)));
            wordDisplay.setText(" ".join(String.valueOf(letters)));
            verify.setText("Correct");
        }
        else {
            verify.setText("Incorrect");
        }
    }
}

Вот как выглядит мой основной интерфейс.Кнопка bLoad загружает дисплей, на котором (в данном случае слово «угадай») _ _ _ _ _ (wordDisplay).Кнопка bCheck предназначена для проверки, присутствует ли слово guessedLetter и, если да, заменит правильную букву.

Интерфейс

Вот мой журнал ошибок: -

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.henry.hangman, PID: 10847
    java.lang.IllegalStateException: Could not execute method for android:onClick
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:390)
        at android.view.View.performClick(View.java:6597)
        at android.view.View.performClickInternal(View.java:6574)
        at android.view.View.access$3100(View.java:778)
        at android.view.View$PerformClick.run(View.java:25885)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)
        at android.view.View.performClick(View.java:6597) 
        at android.view.View.performClickInternal(View.java:6574) 
        at android.view.View.access$3100(View.java:778) 
        at android.view.View$PerformClick.run(View.java:25885) 
        at android.os.Handler.handleCallback(Handler.java:873) 
        at android.os.Handler.dispatchMessage(Handler.java:99) 
        at android.os.Looper.loop(Looper.java:193) 
        at android.app.ActivityThread.main(ActivityThread.java:6669) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858) 
     Caused by: java.util.regex.PatternSyntaxException: Missing closing bracket in character class near index 2
    []
      ^
        at java.util.regex.Pattern.compileImpl(Native Method)
        at java.util.regex.Pattern.compile(Pattern.java:1344)
        at java.util.regex.Pattern.<init>(Pattern.java:1328)
        at java.util.regex.Pattern.compile(Pattern.java:950)
        at java.lang.String.split(String.java:2455)
        at java.lang.String.split(String.java:2497)
        at com.henry.hangman.MainScreen.bCheckClick(MainScreen.java:137)
            ... 13 more

Мне удалось создать замену букв в Python -

word = "guess"
letters = ['_' for i in range(len(word))]
while True:
    guess = input()
    if guess in word:
        letters[word.index(guess)] = word[word.index(guess)]
        print("".join(letters))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...