2014-12-08 3 views
-2

Я делаю слово shuffle app на студии android для проекта класса. Мне нужна помощь в понимании того, как я могу получить вход пользователей и сопоставить их с правильным ответом String. Я попробовал несколько подходов и упал. Я пробовал использовать инструкцию if(word.equals(userAnswer)), но с трудом понимаю ее. Как я могу написать оператор if для ввода/вывода текста в соответствии с моим ответом в студии Android?if statement to match users input to string answer

(Необязательный вопрос) Также является общедоступным void OnClick (View v) хороший подход или мне нужно пойти с чем-то другим?

Любая помощь будет принята с благодарностью. Заранее спасибо!

public class MainActivity extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 
    private EditText userAnswer; 
    private TextView answerOutput; 
    private TextView scrambledWord; 

    public void OnClick(View v){ 
     scrambledWord = (TextView) findViewById(R.id.scrambledWord); 
     userAnswer = (EditText) findViewById(R.id.answerInput); 
     answerOutput = (TextView) findViewById(R.id.answerOutput);   
     Button button = (Button) v; 

     String word = "Animals"; // scan for word 

     ArrayList<Character> chars = new ArrayList<Character>(word.length()); // gets array with length of word 
     for (char c : word.toCharArray()) { 
      chars.add(c); 
     } 
     Collections.shuffle(chars); //shuffles the characters 
     char[] shuffled = new char[chars.size()]; 
     for (int i = 0; i < shuffled.length; i++) { 
      shuffled[i] = chars.get(i); 
     } 
     String shuffledWord = new String(shuffled); 

     if (word.equals(userAnswer)){ 
      answerOutput.setText("Correct!!"); 
     } else { 
      answerOutput.setText("Sorry try again."); 
     } 
    } 

ответ

0

Это позволит вам определить, есть ли они один и тот же

if(word.equalsIgnoreCase(userAnswer.getText().toString())) { 
    answerOutput.setText("Correct"); 
} 

Однако, вообще говоря, у вас есть гораздо более серьезная проблема, если это не в коде где-то, что вы не показывают нас.

Где-то в вашей деятельности onCreate/onStart вы хотите инициализировать свою кнопку любым видом.

Button checkAnswer = (Button) findViewById(//whatever your id is) 

Затем вы хотите установить прослушиватель onClick. С помощью подхода, который вы используете, он в конечном итоге нуждается в двух вещах. Вначале это

public class MainActivity extends Activity implements View.OnClickListener { 

Затем вам нужно установить слушателя onClick на свою кнопку, возможно, в OnCreate.

checkAnswer.setOnClickListener(this); 

Тогда ваш OnClick будет выглядеть как

@Override 
public void onClick(View v) { 

    if (word.equals(userAnswer)){ 

     answerOutput.setText("Correct!!"); 

    } 

    else { 

     answerOutput.setText("Sorry try again."); 
    } 

} 

Логика для скремблирования слова и т.д., вероятно, не будет в OnClick здесь.

Кроме того, если у вас есть несколько вещей, которые вы хотите установить кнопку слушателей для вас будет делать что-то вроде этого

@Override 
public void onClick(View v) { 
    switch(v.getId()) { 
     case(R.id.//whatever): { 
       //dosomething 
       break; 
      } 
    } 
} 

Где можно несколько случаев для всех представлений, которые вы установили в MainActivity для обработки.

Edit: Так как вы обновили свой код

public class MainActivity extends Activity implements View.OnClickListener { 

private EditText userAnswer; 
private TextView answerOutput; 
private TextView scrambledWord; 
private String word; 
private String shuffledWord; 
private Button button; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    scrambledWord = (TextView) findViewById(R.id.scrambledWord); 
    userAnswer = (EditText) findViewById(R.id.answerInput); 
    answerOutput = (TextView) findViewById(R.id.answerOutput); 
    createWord(); 
    button = (Button) findViewById(R.id.button); 
    button.setOnClickListener(this); 
} 

private void createWord() { 
    word = "Animals"; 
    ArrayList<Character> chars = new ArrayList<Character>(word.length()); // gets array with length of word 
    for (char c : word.toCharArray()) { 
     chars.add(c); 
    } 
    Collections.shuffle(chars); //shuffles the characters 
    char[] shuffled = new char[chars.size()]; 
    for (int i = 0; i < shuffled.length; i++) { 
     shuffled[i] = chars.get(i); 
    } 
    shuffledWord = new String(shuffled); 
    shuffledText.setText(shuffledWord); 
} 

@Override 
public void OnClick(View v){ 
    if (word.equalsIgnoreCase(userAnswer.getText().toString())){ 
     answerOutput.setText("Correct!!"); 
    } else { 
     answerOutput.setText("Sorry try again."); 
    } 
} 
+0

Спасибо, чернокнижник, пытающийся это прямо сейчас. –

+0

Благодарим вас за прекрасную помощь. Это было очень интуитивно, позволило мне лучше понять ситуацию. У меня есть 1 вопрос, я получаю сообщение об ошибке со следующим shuffledText.setText (не могу разрешить символ) - я устанавливаю закрытый файл shuffledText, но проблема все еще остается, и если (word.equalsIgnoreCase (userAnswer.getText())) me a "в String нельзя применить к android.text.Editable" –

+0

Я тоже это заметил. Я получаю класс «Основная деятельность» должен либо быть объявлен абстрактным, либо реализовать абстрактный метод OnClickview в OnClickListener для открытого класса MainActivity extends Activity реализует View.OnClickListener {Что это значит? –

0

Вы установили onClickListener кнопки в свою MainActivity?

Ваш MainActivity должен осуществлять OnClickListener слишком

+0

Хороший призыв к этому. Я не осознавал важность этого и считал его полезным, но этого не делал. Я сделаю это. Благодаря! –

+0

проголосовать за плз, спасибо –

+0

Пытается, но он говорит, что мне нужно 15 очков репутаций. Я как только смогу. –

0

Вы должны использовать userAnswer.getText(), чтобы получить ответ. Ваша переменная userAnswer имеет тип EditText, что означает проверку, что word.equals(userAnswer) всегда будет возвращать false, так как они разных типов. Вместо этого попробуйте word.equals(userAnswer.getText()), чтобы проверить, соответствует ли их ответ оригинальное слово. Чтобы проверить, соответствует ли их ответ на скремблированное слово, используйте shuffledWord.equals(userAnswer.getText()).

+0

Удивительный! Отличная информация, очень ценится. Попробуй это сейчас. Я начинаю разглядывать getText и setText. Просто не знал, когда и где их использовать. Еще раз спасибо! –