Проблемы с объединением переменных

#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