Невозможно вставить строку, преобразованную в bool, в оператор if в JAVA - PullRequest
0 голосов
/ 07 октября 2019

Я начинающий, извините, если это очевидно. У меня есть упражнение, которое я пытаюсь закончить, и, похоже, не могу понять. Я понял логику программы. Я должен догадаться, о каком типе грибов кто-то думает, используя 3 вопроса из 6.

Все они имеют характеристики. У меня есть дерево решений с ответами «Да» и «Нет» на бумаге, которое даст мне ответ относительно того, что этот человек угадывает.

Проблема, с которой я сталкиваюсь, пытаясь закодировать это на Java, состоит в том, что оператор IF, который я пытаюсь использовать, отклоняет вводимую мной строку String (несоответствие типов), даже если я сделал эту строкуравно логическому значению.

Я пробовал с parse.Boolean() и Valueof(), и ни один не работал. Я попытался просто сделать

boolean oui = true;

Затем я попытался

import java.util.Scanner;

public class Champi {

    public static void main(String[] args) {

        Scanner clavier = new Scanner(System.in);

        System.out.println("Pensez a un champignon : amanite tue mouches, pied bleu, girolle,");
        System.out.println("cèpe de Bordeaux, coprin chevelu ou agaric jaunissant.");

        boolean oui = true;
        boolean Oui = true;
        boolean non = false;
        boolean Non = false;



        System.out.print("Est-ce que votre champignon a un anneau (true : oui, false : non) ? ");
        String Reponse1 = clavier.nextLine(); 

        if (Reponse1) {
            System.out.print("l'agaric jaunissant");
        }
        else {
            System.out.print("l'amanite tue-mouches");}

Конечно, желаемое поведение - пользователь вводит "Да" или "oui "(как это делается на французском языке) во входные данные и оператор IF для преобразования этого значения в" True "или" No ", преобразованный в" False ". Ничто, похоже, не работает!

Спасибо за вашу помощь.

Ответы [ 3 ]

0 голосов
/ 07 октября 2019

В Java if-оператор принимает только логические типы. В вашем случае вы пытаетесь передать объект String в оператор if. Глядя на логику, я думаю, что вы пытаетесь сначала разобрать да / нет на французском языке. Таким образом, вы можете объединить оба процесса, передав проверку строки в оператор if:

String Reponse1 = clavier.nextLine();
if("oui".equals(Response1.toLowerCase()) || "yes".equals(Response1.toLowerCase())) {
    //positive answer
} else {
//negative
}

Сравнение строки вместо Response1 не вызовет исключения, даже если Response1 будет null. Однако, если вам нравится, вы можете сделать это наоборот

if(Response1.toLowerCase().equals("oui") Response1.toLowerCase().equals("yes")) {
    //positive answer
} else {
//negative
}

Обратите внимание, однако, что вы не можете использовать == при сравнении строк, потому что он будет сравнивать адреса объекта, а несами струны.

0 голосов
/ 07 октября 2019

Причина, по которой это не работает, заключается в том, что введенное значение сохраняется в переменной Reponse1. Даже если текст может совпадать с именем переменной, он не становится этой переменной.

Содержимое строки состоит из букв по порядку. Они никак не соответствуют именам переменных.

Вы можете использовать toLowerCase() в строке, чтобы преобразовать ее во все строчные буквы, что позволяет избежать различий в заглавных буквах. Затем, чтобы проверить, соответствует ли строка другой, просто используйте метод equals.

String Reponse1 = clavier.nextLine();
Reponse1 = Reponse1.toLowerCase();
if(Reponse1.equals("oui") || Reponse1.equals("yes")) {
0 голосов
/ 07 октября 2019

Просто сравните прочитанную строку со словами, которые вы хотите проанализировать.

 if(Response1.toLowerCase().equals("oui") || Response1.toLowerCase().equals("yes")){
       //Statements when true...

 }else{
      // Statements when false...
}
...