Я не могу вернуть строковое значение в Java

#java #string #methods

#java #строка #методы

Вопрос:

У меня есть домашнее задание, которое требует, чтобы я вернул строковое значение для введенного двойного значения. Я попробовал несколько вещей, но ничего не получилось. Возможно, это слишком просто для вас, но я не смог найти ответ здесь или где-либо в Интернете, вероятно, потому, что я не знал, где искать. Если вы просто укажете, где искать, или поможете мне, это было бы здорово. Большое вам спасибо! Сначала я попробовал это:

 public static String gradeLetter(double grade) {
    if (grade<=34) {
        String c = "FF";
        return c;
    }
    if (grade<=45 amp;amp; grade >= 35) {
        String c = "FD";
        return c;
    }
    if (grade<=52 amp;amp; grade >= 46) {
        String c = "DD";
        return c;
    }
    if (grade<=59 amp;amp; grade >= 53) {
        String c = "DC";
        return c;
    }
    if (grade<=66 amp;amp; grade >= 60) {
        String c = "CC";
        return c;
    }
    if (grade<=73 amp;amp; grade >= 67) {
        String c = "CB";
        return c;
    }
    if (grade<=80 amp;amp; grade >= 74) {
        String c = "BB";
        return c;
    }
    if (grade<=87 amp;amp; grade >= 81) {
        String c = "BA";
        return c;
    }
    if (grade<=100 amp;amp; grade >= 88) {
        String c = "AA";
        return c;
    }
}
 

Ну, это не сработало, поэтому я попробовал это:

 public static String gradeLetter(double grade) {
    String c = "";
    if (grade<=34) {
        String a = "FF";
    }
    if (grade<=45 amp;amp; grade >= 35) {
        String a = "FD";
    }
    if (grade<=52 amp;amp; grade >= 46) {
        String a = "DD";
    }
    if (grade<=59 amp;amp; grade >= 53) {
        String a = "DC";
    }
    if (grade<=66 amp;amp; grade >= 60) {
        String a = "CC";
    }
    if (grade<=73 amp;amp; grade >= 67) {
        String a = "CB";
    }
    if (grade<=80 amp;amp; grade >= 74) {
        String a = "BB";
    }
    if (grade<=87 amp;amp; grade >= 81) {
        String a = "BA";
    }
    if (grade<=100 amp;amp; grade >= 88) {
        String a = "AA";
    }
    return c a;
}
 

Все еще не повезло… Оба выдают ошибки компиляции.

Комментарии:

1. Пожалуйста, дайте нам больше информации об этой проблеме, какое сообщение об ошибке вы получаете и чего вы пытаетесь достичь?

2. это не сработало , это не описание ошибки. Пожалуйста, опишите, чего вы ожидаете и что произошло

3. Можете ли вы подробнее рассказать о том, как это не сработало? Вы получаете сообщение об ошибке? Неправильный результат?

4. вам следует рассмотреть возможность использования операторов else if или, возможно, было бы еще лучше использовать операторы switch

5. Это выдало ошибку компиляции, но теперь она решена.

Ответ №1:

вы используете локальную переменную в функции, поэтому она возвращает значение null, вероятно, вы можете попробовать это :

   public static String gradeLetter(double grade) {
    String a = "";
    if (grade<=34) {
         a = "FF";
    }
    if (grade<=45 amp;amp; grade >= 35) {
         a = "FD";
    }
    if (grade<=52 amp;amp; grade >= 46) {
         a = "DD";
    }
    if (grade<=59 amp;amp; grade >= 53) {
         a = "DC";
    }
    if (grade<=66 amp;amp; grade >= 60) {
         a = "CC";
    }
    if (grade<=73 amp;amp; grade >= 67) {
         a = "CB";
    }
    if (grade<=80 amp;amp; grade >= 74) {
         a = "BB";
    }
    if (grade<=87 amp;amp; grade >= 81) {
         a = "BA";
    }
    if (grade<=100 amp;amp; grade >= 88) {
         a = "AA";
    }
    return a;
}
 

Дайте мне знать, если это сработает

Комментарии:

1. рассмотрите возможность использования else if

2. Это сработало. Я так ошеломлен, потому что я работал над этим почти 30 минут, и вы дали мгновенный ответ. Спасибо!

Ответ №2:

В вашем первом случае, я думаю, вы получаете ошибку компиляции, потому что вы пропускаете возврат в конце метода (за пределами оператора if

 public static String gradeLetter(double grade) {
    if (grade<=34) {

...
    if (grade<=100 amp;amp; grade >= 88) {
        String c = "AA";
        return c;
    }
   return null;
}
 

во втором случае вы пытаетесь получить доступ a за пределы определенной области:

 public static String gradeLetter(double grade) {
    String a = "";
    if (grade<=34) {
        a = "FF";
    }
    if (grade<=45 amp;amp; grade >= 35) {
        a = "FD";
    }
    ....
    return a;
}
 

Комментарии:

1. Спасибо, вы правы. Я не знаю, что такое return null, но я уверен, что буду учиться на предстоящих занятиях. Спасибо за ответ и время, которое вы уделили моей проблеме.

2. @Vecta null похоже на неопределенное значение. dev.to/dj_devjournal /. … Вы также можете вернуть любую другую строку здесь. Важно иметь оператор return

3. это очень полезно, большое вам спасибо. Я думаю, что начал понимать концепцию null.

Ответ №3:

Попробуйте это

 public class HelloWorld {
    public static String gradeLetter(double grade) {
        String stringValue = "";
        
        if (grade <= 45 amp;amp; grade >= 35) {
            stringValue = "FD";
        } else if (grade <= 52 amp;amp; grade >= 46) {
            stringValue = "DD";
        } else if (grade <= 59 amp;amp; grade >= 53) {
            stringValue = "DC";
        } else if (grade <= 66 amp;amp; grade >= 60) {
            stringValue = "CC";
        } else if (grade <= 73 amp;amp; grade >= 67) {
            stringValue = "CB";
        } else if (grade <= 80 amp;amp; grade >= 74) {
            stringValue = "BB";
        } else if (grade <= 87 amp;amp; grade >= 81) {
            stringValue = "BA";
        } else if (grade <= 100 amp;amp; grade >= 88) {
            stringValue = "AA";
        } else {
            stringValue =  "FF";
        }

        return stringValue;
    }

    public static void main(String [] args) {
        System.out.println(gradeLetter(75.59));
    }
}
 

Комментарии:

1. Попробуйте, это не anser. Объясните, что вы изменили и почему.

2. Я только удалил избыточную переменную c из функции, потому что одной переменной достаточно для выполнения задания, переименования a и добавления if-else операторов для сравнения. Кроме того, если значение grade превышает 100, функция вернет FF , что в некотором смысле является «неопределенным результатом» для ввода, выходящего за пределы 100.

3. Это объяснение должно быть частью вашего ответа

Ответ №4:

Здесь есть две основные проблемы: 1) Переменная a не объявлена в случае grade>100, и в этом случае programm выдаст ошибку 2) Нет необходимости проверять все эти условия, потому что только одно будет истинным, поэтому вам лучше использовать if else, если такие операторы, как:

 public static String gradeLetter(double grade) {
        String a ="";
        if (grade<=34) {
            a = "FF";
        }else if (grade<=45 amp;amp; grade >= 35) {
            a = "FD";
        }else if (grade<=52 amp;amp; grade >= 46) {
            a = "DD";
        }else if (grade<=59 amp;amp; grade >= 53) {
            a = "DC";
        }else if (grade<=66 amp;amp; grade >= 60) {
            a = "CC";
        }else if (grade<=73 amp;amp; grade >= 67) {
            a = "CB";
        }else if (grade<=80 amp;amp; grade >= 74) {
             a = "BB";
        }else if (grade<=87 amp;amp; grade >= 81) {
            a = "BA";
        }else if (grade<=100 amp;amp; grade >= 88) {
            a = "AA";
        }
        return a;
 }
 

Таким образом, вы убедитесь, что ваш метод вернет значение (даже если это пустая строка), и вы не будете тратить время на проверку утверждений if, которые будут ложными

Комментарии:

1. Объединение с пустой строкой c не имеет смысла.