Java - Использование троичного оператора на вводе символов для получения логического значения - PullRequest
2 голосов
/ 08 февраля 2020

Хочется сделать что-то вроде в C#:

bool walkable = t.Type == TileType.Green ? true : false;

, но в Java

Boolean international_F = (in.next() == 'Y') ? true : false;

Выше я попробовал выше. Интересно, если это вообще возможно.

РЕДАКТИРОВАТЬ: Я только заметил, .nextChar() не существует. Отредактированный фрагмент для отражения этого.

Ответы [ 4 ]

2 голосов
/ 08 февраля 2020

"nextChar": Предполагая, что in - это Scanner, ваша проблема в том, что в Сканере нет метода nextChar(). Вы можете прочитать целое слово, а затем взять его первый символ:

char theChar = in.next().charAt(0)

boolean vs ternery: Если вы выводите true / false, тогда вам не нужен if. Вы можете просто написать:

bool walkable = t.Type == TileType.Green; // C#
boolean international_F = in.next().charAt(0) == 'Y'` // Java

boolean vs Boolean: Обратите также внимание, что boolean является примитивным логическим типом в Java. Использование Boolean заставит его обернуть его в булев класс первый. Так как charAt() возвращает примитивный символ, вам нужно использовать stati c Character.toUpperCase().

Решение:

boolean isY = Character.toUpperCase(in.next().charAt(0)) == 'Y'
// - OR - 
boolean isY = in.next().startsWith("Y") // not case-insensitive
1 голос
/ 08 февраля 2020

Вам не нужен троичный оператор, чтобы просто назначить результат (true / false) оценки условия. Вам нужен троичный оператор, если вы хотите что-то сделать на основе результата оценки условия, например

import java.util.Scanner;

public class Main {
    public static void main(String[] args) throws Exception {
        Scanner in = new Scanner(System.in);
        System.out.print("Do you want to continue? [Y/N]: ");
        boolean yes = in.nextLine().toUpperCase().charAt(0) == 'Y';
        if (yes) {
            System.out.println("You have chosen to continue");
        } else {
            System.out.println("You have chosen to stop");
        }

        // Or simply
        System.out.print("Do you want to continue? [Y/N]: ");
        if (in.nextLine().toUpperCase().charAt(0) == 'Y') {
            System.out.println("You have chosen to continue");
        } else {
            System.out.println("You have chosen to stop");
        }

        // You can use ternary operator if you want to do something based on the result
        // of evaluation of the condition e.g.
        System.out.print("Do you want to continue? [Y/N]: ");
        String response = in.nextLine().toUpperCase().charAt(0) == 'Y' ? "Yes" : "No";
        System.out.println(response);

        // Without a ternary operator, you would write it as:
        System.out.print("Do you want to continue? [Y/N]: ");
        String res;
        char ch = in.nextLine().toUpperCase().charAt(0);
        if (ch == 'Y') {
            res = "Yes";
        } else {
            res = "No";
        }
        System.out.println(res);
    }
}

Пример выполнения:

Do you want to continue? [Y/N]: y
You have chosen to continue
Do you want to continue? [Y/N]: n
You have chosen to stop
Do you want to continue? [Y/N]: y
Yes
Do you want to continue? [Y/N]: n
No
1 голос
/ 08 февраля 2020
Boolean international_F = "Y".equals(in.next()); // next  returns a string
Boolean international_F =in.next().charAt(0) == 'Y';
0 голосов
/ 08 февраля 2020

Это пример, демонстрирующий, что вы хотите сделать:

char a = 'a';
char b = 'b';

Boolean b1 = (a == 'a') ? true : false;
Boolean b2 = (a == b) ? true : false;

System.out.println(b1);
System.out.println(b2);

Вывод будет:

true
false
...