#java #variables #double
Вопрос:
Я пытаюсь написать этот код так, чтобы он добавлял значения переменных, но сумма всегда составляет 0,00. Может ли кто-нибудь объяснить, почему, так как на боковой панели нет ошибок. Приношу извинения, если эта проблема очень проста, я новичок в кодировании. Я подозреваю, что проблема может быть связана с конфликтующими переменными, но я не уверен, и если это так, я не знаю, как я могу это исправить.
import java.util.Scanner;
public class TitanicAgeSubmissions {
public static void main(String[] args) {
// Write a program for four people to enter the Titanic Belfast.
// They all must have variable ages, which the user should be able to input.
// There are four age values:
// Adult: £19
// Child (5-16): £8.50
// Child under 5: Free
System.out.println("Please enter the age of the first Visitor:");
Scanner sc= new Scanner (System.in);
double age1 = sc.nextDouble();
System.out.println("Please enter the age of the second Visitor:");
Scanner sc2= new Scanner (System.in);
double age2 = sc.nextDouble() ;
System.out.println("Please enter the age of the third Visitor:");
Scanner sc3= new Scanner (System.in);
double age3 = sc.nextDouble();
System.out.println("Please enter the age of the fourth Visitor:");
Scanner sc4= new Scanner (System.in);
double age4 = sc.nextDouble();
if (age1>16) {;
double ticketprice1 = 19; }
else if (age1 <16 amp;amp; age1>=5) {
double ticketprice1= 8.50; }
else if (age1 <5) {
}double ticketprice1 = 0.00 ;
// next values
if (age1>16) {;
double ticketprice2 = 19; }
else if (age1 <16 amp;amp; age1>=5) {
double ticketprice2= 8.50; }
else if (age1 <5) {
}double ticketprice2 = 0.00;
// next values
if (age1>16) {;
double ticketprice3 = 19; }
else if (age1 <16 amp;amp; age1>=5) {
double ticketprice3= 8.50; }
else if (age1 <5) {
}double ticketprice3= 0.00;
// next values
if (age1>16) {;
double ticketprice4 = 19; }
else if (age1 <16 amp;amp; age1>=5) {
double ticketprice4= 8.50; }
else if (age1 <5) {
}double ticketprice4 = 0.00;
double grandtotal = ticketprice1 ticketprice2 ticketprice3 ticketprice4;
System.out.println("The grand total of the tickets in pounds is:" " " grandtotal);
}
}
Комментарии:
1. Во-первых, это Java, а не Javascript. Затем вы захотите изучить эту ссылку: Как отлаживать небольшие программы , так как она даст вам инструкции о том, как самостоятельно решить эту проблему и ваши будущие проблемы
Ответ №1:
ваша проблема заключается в том, что вы должны объявить переменные tickerprice до if, и вам следует обратить внимание на фигурные скобки, потому что вы поместили некоторые из них в неправильные позиции. И вам следует научиться правильно использовать точку с запятой ( ; ) вы пишете их после if(…) { ; , но нет необходимости писать их после if. Я рекомендую вам писать код более тщательно и стараться сделать свой код более читабельным, и в конце концов, это не javascript, узнайте больше о языках программирования, и в следующий раз все будет хорошо. Это решение вашей проблемы:
import java.util.Scanner;
public class TitanicAgeSubmissions {
public static void main(String[] args) {
// Write a program for four people to enter the Titanic Belfast.
// They all must have variable ages, which the user should be able to input.
// There are four age values:
// Adult: £19
// Child (5-16): £8.50
// Child under 5: Free
System.out.println("Please enter the age of the first Visitor:");
Scanner sc= new Scanner (System.in);
double age1 = sc.nextDouble();
System.out.println("Please enter the age of the second Visitor:");
Scanner sc2= new Scanner (System.in);
double age2 = sc.nextDouble() ;
System.out.println("Please enter the age of the third Visitor:");
Scanner sc3= new Scanner (System.in);
double age3 = sc.nextDouble();
System.out.println("Please enter the age of the fourth Visitor:");
Scanner sc4= new Scanner (System.in);
double age4 = sc.nextDouble();
double ticketprice1 = 0.0, ticketprice2 = 0.0, ticketprice3 = 0.0, ticketprice4 = 0.0;
if (age1>16) {
ticketprice1 = 19;
}
else if (age1 <16 amp;amp; age1>=5) {
ticketprice1= 8.50;
}
else if (age1 <5) {
ticketprice1 = 0.00 ;
}
// next values
if (age2>16) {
ticketprice2 = 19;
}
else if (age2 <16 amp;amp; age2>=5) {
ticketprice2= 8.50;
}
else if (age2 <5) {
ticketprice2 = 0.00 ;
}
// next values
if (age3>16) {
ticketprice3 = 19;
}
else if (age3 <16 amp;amp; age3 >=5) {
ticketprice3= 8.50;
}
else if (age3 <5) {
ticketprice3 = 0.00 ;
}
// next values
if (age4>16) {
ticketprice4 = 19;
}
else if (age4 <16 amp;amp; age4 >=5) {
ticketprice4= 8.50;
}
else if (age4 <5) {
ticketprice4 = 0.00 ;
}
double grandtotal = ticketprice1 ticketprice2 ticketprice3 ticketprice4;
System.out.println("The grand total of the tickets in pounds is:" " " grandtotal);
}
}
Ответ №2:
Основной причиной неправильного расчета является неправильное объявление и инициализация ticketprice#
переменных. Кроме того, есть ошибка в использовании одного и того же age1
для определения значений всех ticketprice#
переменных.
Другие ошибки/недостатки:
- объявление неиспользуемых
Scanner
экземпляровsc2, sc3, sc4
-использование только одногоScanner
вполне нормально - пробел
age == 16
вif
заявлениях - многократное использование
double var1, var2, ...
вместо массиваdouble[] ages, ticketPrices;
Для определения цены с учетом возраста следует использовать отдельный метод.
Таким образом, улучшенное решение может выглядеть следующим образом:
static double getPrice(double age) {
double price = 0.0; // default value
if (age > 16) { // for adults
price = 19;
} else if (age >= 5) { // for children
price = 8.5;
}
return price;
}
public static void main(String[] args) {
int n = 4;
double[] ages = new double[n];
double[] prices = new double[n];
String[] ids = {"first", "second", "third", "fourth"};
double sum = 0.0;
Scanner sc= new Scanner (System.in);
for (int i = 0; i < n; i ) {
System.out.println("Please enter the age of the " ids[i] " Visitor:");
ages[i] = sc.nextDouble();
prices[i] = getPrice(ages[i]);
sum = prices[i];
// or a chain may be used
// sum = prices[i] = getPrice(ages[i] = sc.nextDouble());
}
System.out.println("The grand total of the tickets in pounds is: £" sum);
}
Результат выполнения теста:
Please enter the age of the first Visitor:
4
Please enter the age of the second Visitor:
16
Please enter the age of the third Visitor:
21
Please enter the age of the fourth Visitor:
9
The grand total of the tickets in pounds is: £36.0