Как я могу проверить, есть ли в строке +, - или . (десятичное) в первом символе?

Я пишу программу, которая определит, является ли двойной литерал 4 символами, и распечатает его на экране. Я считаю, что правильно сделал ту часть, где я проверю, есть ли ровно 4 символа. Я застрял в том, как проверить, есть ли +, - или . является первым символом. Со мной str.charAt(0) == "+" || "-" || "." Я получаю сообщение об ошибке «Несовместимый операнд».

public class Program4 {

    public static void main(String[] args) {



    Scanner stdIn = new Scanner(System.in);

    String str;

    System.out.println("Please enter a valid (4 character) double literal consisting of these numbers and symbols: '+', '-', '.', (decimal point), and '0' through '9'");

    str = stdIn.nextLine();
    int length = str.length();

    // the next if statement will determine if there are exactly 4 characters \\
    if ( length == 4 ) { 

        // the next if statement checks for a +, -, or . (decimal) in the first character \\
        if ( str.charAt(0) == "+" || "-" || ".") {

        }
    }


    else {  

        System.out.println ("Please restart the program and enter in a valid 4 character double literal.");

    }

    }
}
if ("+-.".indexOf(str.charAt(0)) >= 0) {
4castle 26.02.2019 23:45
str.charAt(0) == '+' || str.charAt(0) == '-' || str.charAt(0) == '.'
Andreas 26.02.2019 23:45

Это не КОБОЛ; вы не можете выполнять «быстрые» логические операции, такие как x == a || b || c. Вы должны написать каждое сравнение полностью: x == a || x == b || x == c

Kevin Anderson 26.02.2019 23:49
String#startsWith
MadProgrammer 26.02.2019 23:56
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
108
3

Ответы 3

заменить это if ( str.charAt(0) == "+" || "-" || ".") {

с участием

`if ( str.charAt(0) == '+' || str.charAt(0)=='-' || str.charAt(0)=='.') {

Все еще недопустимый синтаксис Java, так как вы не можете сказать a == 1 || 2 || 3

Andreas 26.02.2019 23:47

очевидно -----

nissim abehcera 26.02.2019 23:50

Этот ...

    if ( str.charAt(0) == "+" || "-" || ".") {

... не имеет смысла. Операнды оператора || должны быть booleans. Выражение str.charAt(0) == "+" оценивается как boolean, а две отдельные строки — нет.

Есть множество способов решить эту проблему, и какой из них наиболее подходит для вас, зависит от контекста. Однако способ один использует тот факт, что строковые литералы — это String, как и любые другие, для которых вы можете вызывать методы. Такие как indexOf():

if ("+-.".indexOf(str.charAt(0)) >= 0) {
    // starts with +, -, or .
}

Вы не решили другую проблему с кодом, то есть сравнение char со строковым литералом, а не с символьным литералом.

Andreas 27.02.2019 00:10

По-другому:

switch ( str.charAt(0) ) {
  case '+': case '-': case '.':
    <do something>
    break;
}

Другие вопросы по теме