Нужно ли также возвращать строку вне условия if-else, когда тип возвращаемого значения String - PullRequest
0 голосов
/ 26 мая 2018

enter image description here Компилятор говорит, что нужно возвращать строку. Я использовал условие if-else и изнутри if-else я возвратил строку. Проблема компилятора будет решена, если я добавлю инструкцию return вконец кода, но моя проблема начнется. Я не понимаю, как решить эту проблему. Я хочу вернуть право, когда это правильно.

Код:

public String isValidID(String id) {
     if(getId().length()!=6) {//checks for 6 digit id
         return "wrong";
     }
     else{//checks if digit contains invalid entry
        for(int i=0;i<getId().length();i++){
            if(Id.charAt(i)>'9'||Id.charAt(i)<'0')
                return "wrong";
            }
     }


}

Ответы [ 6 ]

0 голосов
/ 26 мая 2018

В ответ на мой комментарий для добавления return "right" в конце вы сказали:

, но это заставит программу всегда возвращаться "правильно". Поскольку после проверки условия if-else,компилятор выполнит оператор rest и всегда будет возвращать «right»

Теперь источник вашей путаницы ясен: return не просто устанавливает значение, которое будет возвращать метод, это также немедленно выходит из метода.Так, например, return "wrong"; внутри вашего цикла немедленно выйдет из цикла и метода.Это верно для всех языков, которые я видел, которые используют ключевое слово return (тогда как есть некоторые языки, такие как VB / VB.Net, где вы присваиваете значение имени функции, чтобы установить возвращаемое значение, но выполнение продолжаетсяобычно, пока вы не используете «выход»).

Вот почему добавление return "right"; в конце - это то, как вы решаете эту проблему, потому что код не достигнет этой точки, если он когда-либо достигнет return "wrong"; во время выполнения программы.над ним:

public String isValidID(String id) {
     if(getId().length()!=6) {//checks for 6 digit id
         return "wrong";                        // <== Exits immediately if reached
     }
     else{//checks if digit contains invalid entry
        for(int i=0;i<getId().length();i++){
            if(Id.charAt(i)>'9'||Id.charAt(i)<'0')
                return "wrong";                 // <== Exits immediately if reached
            }
     }
     return "right";                            // <== Exits immediately if reached
                                                // (granted, we would have exited
                                                // below anyway :-) )
}
0 голосов
/ 26 мая 2018

В любом состоянии вам нужно вернуть «что-то».В вашем коде возможно, что return никогда не выполняется в определенном состоянии.Предположим, что выполнение вашей программы достигает значения if(Id.charAt(i)>'9'||Id.charAt(i)<'0') и никогда не достигает значения true. Тогда что вернет метод?Итак, вам нужно написать код таким образом, чтобы при выполнении метода условия выполнялся оператор return, который возвращает объект String.

Просто представьте себе условие Предположим,

1. getId().length()!=6 -> false
2. getId().length() is 0 
3. for(int i=0;i<getId().length();i++) will never enter the loop.

Тогда что должнометод возвращается при вызове.

0 голосов
/ 26 мая 2018

Так что в вашем случае я бы сделал public boolean isValidID.

Здесь компилятор сообщает вам, что нужно возвращать что-то, если длина идентификатора не верна, а компоненты идентификатора (таксимволы от 0 до 9 (например, если ваш идентификатор - что-то вроде 00ggg89, то я полагаю, что это неправильно, но если ваш идентификатор - 000000, то это может быть правильно. Вот что я бы сделал

public boolean isValidID(String id) {
    return id.matches("[0-9]{6}");
}

Надеюсь, это поможет!: D

0 голосов
/ 26 мая 2018

Если я могу понять вашу логику, вы можете просто использовать:

public String isValidID(String id) {
   return id.matches("\\d{6}") ? "correct" : "wrong";
}

Вы проверяете длину, если она равна 6 или нет, затем вы проверяете, все ли символы являются цифрами, вы можете объединить оба из них в одининструкции, просто проверьте, является ли входное число длиной 6 с регулярным выражением.

Если вы хотите получить чистое решение, используйте boolean вместо строки, в этом случае вы можете использовать:

public boolean isValidID(String id) {
   return id.matches("\\d{6}");
}
0 голосов
/ 26 мая 2018

Внутри вашего остального есть еще одно выражение if, поэтому ваше возвращение не всегда достигается.Вам нужно еще один возврат после цикла.И вы проверяете, является ли что-то правильным или неправильным, вы должны вернуть логическое значение true или false.

public boolean isValidID (String id) {if (getId (). Length ()! = 6) {// проверяет наличие 6-значного идентификатора return false;} else {// проверяет, содержит ли цифра недопустимую запись для (int i = 0; i'9 '|| Id.charAt (i) <' 0 ') return false;} return true; // когда ничего не найдено.}} </p>

0 голосов
/ 26 мая 2018
public String isValidID(String id) {
    String result = "right";
        if(getId().length()!=6) {//checks for 6 digit id
            result =  "wrong";
        }
        else{//checks if digit contains invalid entry
            for(int i=0;i<getId().length();i++){
                if(Id.charAt(i)>'9'||Id.charAt(i)<'0')
                    result  = "wrong";
            }
        }
        return result;
    }

Редактировать: Если первый оператор недействителен, он никогда не попадет в оператор возврата.Вот почему вы должны возвращать String во всех возможных случаях.

...