#java #if-statement #variables #double
#java #if-оператор #переменные #double
Вопрос:
Предполагается, что эта программа получает вес некоторой почты от пользователя и вычисляет, сколько это стоит. После 100g стоимость увеличивается на 2,5 доллара / 50g. Однако, когда я пытаюсь запустить программу, она говорит: «переменная стоимость, возможно, не была инициализирована». Это потому, что я инициализирую ее в операторе if или что-то в этом роде? Я знаю, что у некоторых людей были ошибки, потому что они объявляли переменную в статусе if, но я объявил свою переменную вне оператора if. Что я делаю не так.
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
double mailWeight;
double cost;
System.out.println("How much does your mail weigh (g)");
mailWeight = in.nextDouble();
in.close();
if (mailWeight > 0 amp;amp; mailWeight <= 30) {
cost = 4;
}else if (mailWeight > 30 amp;amp; mailWeight <= 50) {
cost = 5.50;
}else if (mailWeight > 50) {
double x = mailWeight - 100;
if (x >= 50) {
double y = x/50;
Math.ceil(y);
double z = y * 2.5;
cost = z 7;
}
}
System.out.println(cost);
}
}
Ответ №1:
Помимо variable not initialized
проблемы, есть еще несколько мест для улучшения:
- удалите избыточные проверки
- исправлен расчет стоимости избыточного веса
Scanner
на основеSystem.in
не нужно закрывать
Scanner in = new Scanner(System.in);
System.out.println("How much does your mail weigh (g)");
double mailWeight = in.nextDouble();
double cost;
if (mailWeight <= 0) {
cost = 0;
} else if (mailWeight <= 30) {
cost = 4;
} else if (mailWeight <= 50) {
cost = 5.50;
} else {
cost = 7;
if (mailWeight > 100) {
double y = Math.ceil((mailWeight - 100) / 50.0);
cost = 2.5 * y;
}
}
System.out.println(cost);
Ответ №2:
Он не инициализируется, если выполняется последнее значение else if и x < 50 или когда ни один из операторов if не приводит к true для mailWeight . Вы могли бы предварительно инициализировать стоимость. (двойная стоимость = 0) Или вы могли бы добавить все недостающие блоки else. Вам необходимо инициализировать свою переменную во всех возможных случаях, прежде чем читать ее.
Вероятно, это сработало бы:
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
double mailWeight;
double cost;
System.out.println("How much does your mail weigh (g)");
mailWeight = in.nextDouble();
in.close();
if (mailWeight > 0 amp;amp; mailWeight <= 30) {
cost = 4;
} else if (mailWeight > 30 amp;amp; mailWeight <= 50) {
cost = 5.50;
} else if (mailWeight > 50) {
double x = mailWeight - 100;
if (x >= 50) {
double y = x/50;
Math.ceil(y);
double z = y * 2.5;
cost = z 7;
} else {
cost = 0; // Or whatever you want to set it to in this case
}
} else {
cost = 0; // Or whatever you want to set it to in this case
}
System.out.println(cost);
}
Или предварительная инициализация стоимости:
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
double mailWeight;
double cost = 0; // Or whatever you want it to be if none of the cases match
System.out.println("How much does your mail weigh (g)");
mailWeight = in.nextDouble();
in.close();
if (mailWeight > 0 amp;amp; mailWeight <= 30) {
cost = 4;
} else if (mailWeight > 30 amp;amp; mailWeight <= 50) {
cost = 5.50;
} else if (mailWeight > 50) {
double x = mailWeight - 100;
if (x >= 50) {
double y = x/50;
Math.ceil(y);
double z = y * 2.5;
cost = z 7;
}
}
System.out.println(cost);
}
Ответ №3:
Как говорится в ошибке, вы не инициализировали эти две переменные «Вес почты» и «стоимость»
Поскольку они являются локальными переменными (внутри метода), вам необходимо инициализировать их, прежде чем обращаться к ним. Вы инициализируете, присваивая начальное значение:
double mailWeight=0;
double cost=0;