Я пытаюсь написать метод в java для запуска случаев введенной пользователем строки.

Код:

 static String checkWMI(String userVIN){

    String manCountry = null;
    String WMI = userVIN.substring(0, 5);
    String Wcheck = WMI.substring(WMI.length()- 4);

    if(Wcheck.equals("1") || Wcheck.equals("4") || Wcheck.equals("5")) {
         manCountry = "United States";
    }else if(Wcheck.equals("J")){
        manCountry = "Japan";
    }else if(Wcheck.equals("2")){
        manCountry = "Canada";
    }else if(Wcheck.equals("3")){
        manCountry = "Mexico";
    }else if(Wcheck.equals("S")){
        manCountry = "United Kingdom";
    }else if(Wcheck.equals("W")) {
        manCountry = "Germany";
    }

    return manCountry;
}
 }

Цель состоит в том, чтобы получить конкретную подстроку (чтобы я мог распечатать ее позже), а затем определить значение на основе части этой подстроки. Я хочу решить это на основе символа с нулевым индексом. Когда я пытаюсь запустить этот код, печатается только «null», потому что он говорит, что мое «оператор if всегда ложно». Я знаю, что где-то должна быть логическая ошибка, но я не могу ее найти. Какие-либо предложения?

-1
LearnMEprogram 26 Янв 2022 в 13:08
Какую входную строку (userVIN) вы предоставили? Я подозреваю, что это будет случай else, который здесь не определен.
 – 
Sai
26 Янв 2022 в 13:11
Строка из 17 символов: цифры или буквы. Что-то вроде "W1234567890123456".
 – 
LearnMEprogram
26 Янв 2022 в 13:13
1
Подсказка: попробуйте распечатать значение Wcheck. Я не думаю, что это то, что вы ожидаете. (Я также настоятельно рекомендую вам начать следовать обычным соглашениям об именах Java - и если вам нужен только один символ, я бы использовал charAt, а не получал строку...)
 – 
Jon Skeet
26 Янв 2022 в 13:14
2
Я не думаю, что метод подстроки, который принимает один параметр, делает то, что вы думаете. Я рекомендую прочитать его документацию: docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/… — Итак, WMI.substring(WMI.length()- 4); в WMI с длиной 5 вернет подстроку длины 4. И почему строка длиной 4 не равна ни одной из строк длины 1, которую вы проверяете в своих операторах if, должно быть очевидно.
 – 
OH GOD SPIDERS
26 Янв 2022 в 13:16
1
Кстати. если все, что вы хотите проверить, это то, с какой буквы начинается String, уже есть метод String с именем startsWith - docs.oracle.com/en/java/javase/11/docs/api/java .base/java/lang/… — именно для этого. Вот почему чтение официальной документации считается важным. Потому что он говорит вам, какие методы доступны и что они на самом деле делают, что приведет к гораздо лучшим результатам, чем простое предположение.
 – 
OH GOD SPIDERS
26 Янв 2022 в 13:25

1 ответ

Лучший ответ

Статическая строка checkWMI (строка userVIN) {

String manCountry = null;
String WMI = userVIN.substring(0, 5);

if(WMI.startsWith("1") || WMI.startsWith("4")  || WMI.startsWith("5") ) {
     manCountry = "United States";
}else if(Wcheck.equals("J")){
    manCountry = "Japan";
}else if(Wcheck.equals("2")){
    manCountry = "Canada";
}else if(Wcheck.equals("3")){
    manCountry = "Mexico";
}else if(Wcheck.equals("S")){
    manCountry = "United Kingdom";
}else if(Wcheck.equals("W")) {
    manCountry = "Germany";
}

return manCountry;

}}

Или

static String checkWMI(String userVIN){

String manCountry = null;
String WMI = userVIN.substring(0, 5);

if(WMI.charAt(0) == "1" || WMI.charAt(0) == "4"  || WMI.charAt(0) == "5"  ) {
     manCountry = "United States";
}else if(Wcheck.equals("J")){
    manCountry = "Japan";
}else if(Wcheck.equals("2")){
    manCountry = "Canada";
}else if(Wcheck.equals("3")){
    manCountry = "Mexico";
}else if(Wcheck.equals("S")){
    manCountry = "United Kingdom";
}else if(Wcheck.equals("W")) {
    manCountry = "Germany";
}

return manCountry;

}}

0
Amjad Saab 26 Янв 2022 в 13:41