Java: если / еще не отвечает даже без ошибок компиляции

java if-statement logic

102 просмотра

4 ответа

Я написал простой if / else, который должен напечатать ответ на if else. но не отвечает даже с правильным вводом. Я не вижу, что мне не хватает.

import java.util.Scanner;
public class MarriageQuiz{
    public static void main(String[] args){   
        Scanner input = new Scanner(System.in);
        String marStat;
        System.out.print("Please enter your Marital Status (M or S) >> ");
        marStat = input.nextLine();
        marStat = marStat.toUppercase();            
        if(marStat.equals('M')){
            System.out.print("You are married");
        }
        else if(marStat.equals('S')){
            System.out.print("You are single");
        }
    }         
}
Автор: Ryan Martin Источник Размещён: 08.11.2019 11:02

Ответы (4)


2 плюса

Решение

использование ""

if(marStat.equals("M")){
        System.out.print("You are married");
    }
    else if(marStat.equals("S")){
        System.out.print("You are single");
    }
Автор: Durgpal Singh Размещён: 20.08.2016 08:00

4 плюса

Ваш код сравнивает Stringобъект с символьным литералом, который, как я полагаю, будет встроен в JVM Character. Ну, эти два объекта не принадлежат одному и тому же классу, поэтому "M".equals('M')вернут false. Чтобы исправить это, используйте "M".equals("M").

изменить , toUppercase()чтобы toUpperCase()и marStat.equals('M')в marStat.equals("M")тоже marStat.equals('S')кmarStat.equals("S")

import java.util.Scanner;

public class MarriageQuiz {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String marStat = "";

        System.out.print("Please enter your Marital Status (M or S) >> ");
        marStat = input.nextLine();
        marStat = marStat.toUpperCase();

        if (marStat.equals("M")) {
            System.out.print("You are married");
        } else if (marStat.equals("S")) {
            System.out.print("You are single");
        }
    }
}
Автор: Nikhil Размещён: 20.08.2016 08:05

4 плюса

С другой стороны, вы можете использовать Characterтип вместо «String». Скорее использование Characterбудет более точным, поскольку вы имеете дело только с одним персонажем.

Scanner input = new Scanner(System.in);

Character marStat;
System.out.print("Please enter your Marital Status (M or S) >> ");

marStat = input.next().charAt(0);
marStat = Character.toUpperCase(marStat);

if (marStat.equals('M')) {
    System.out.println("You are married");
} else if (marStat.equals('S')) {
    System.out.println("You are single");
}
Автор: Shahid Размещён: 20.08.2016 08:18

0 плюса

Как упоминалось в комментарии выше, вы сравниваете объект String с автоматически помещаемым объектом Character. Одно из исправлений, очевидно, заключается в использовании двойных кавычек, которые Java будет автоматически блокировать для объекта String, в котором будет работать ваш код.

Несколько советов по сохранению нескольких строк кода: используйте String.equalsIgnoreCase () для сохранения строки, преобразующей входящую строку в верхний регистр.

Далее рассмотрим использование константы для семейного положения:

public class MarriageQuiz{
    private static final String STATUS_MARRIED = "M";
    ...
    if (marStat.equalsIgnoreCase(STATUS_MARRIED)) {
    ...

Таким образом, вы можете использовать STATUS_MARRIED во всем своем коде, но можете легко изменить его, скажем, с «M» на «Женат».

Автор: Nate Vaughan Размещён: 20.08.2016 03:20
Вопросы из категории :
32x32