Я не уверен, почему это не работает, eclipse продолжает говорить мне, что «A», «B» и «C» не определены как переменные, и предлагает сделать их определенными («A», «B» и «C» - это все параметры, которые пользователь может ввести для получения результата). Может кто-нибудь найти исправление?

/*
 * George Sayegh
 * Febuary 17th 2016
 * program for phone plan
 */

import javax.swing.JOptionPane;
public class Feb21716 {

    public static void main(String[] args) {
    double Package, Data, Bill;

        //Get Package
        String Packagetext = JOptionPane.showInputDialog("Enter your wireless service carrier plan" 
        + "\n Package A: For $29.99 per month 2GB of data is provided. Additional data is $10.00 per GB." 
        + "\n Package B: For $39.99 per month 4GB of data is provided. Additional data is $5.00 per GB. "
        + "\n Package C: For $49.99 per month unlimited data is provided."
        + "\n Please enter only the letter in Upper Case ex. Package A = A");
        Package = Double.parseDouble(Packagetext);

        //Get Amount of Data Used
        String Datatext = JOptionPane.showInputDialog("Please enter the Amount of data you use in GB" 
        + "\n Please note, just enter the numbers "
        + "\n ex. 750 MB = .75  ");

        if(( Package == A )&&(Data <= 2)){
            // when Package is A and less than 2GB
            Bill = 29.99;
        } else if ((Package == A)&&(Data > 2)) {
            // when package is A and more than 2GB
            Bill = 29.99 + 10 * Data;
        } else if ((Package == B)&&(Data <= 4)) {
            // when package is B and less than 4GB
            Bill = 39.99;
        } else if ((Package == B)&&(Data > 4)){
            // when package is B and more than 4GB
            Bill = 29.99 + 10 * Data;
        } else if ((Package == C)&&(Data < 50)){
            // when package is C and less than 50gb
            Bill = 49.99;
        } else if ((Package == C)&&(Data > 50)){
            // when package is C and more than 50gb
            Bill = JOptionPane.showMessageDialog(null, "You have entered an invalid Number");
        }

        JOptionPane.showMessageDialog(null, "Your bill is: $" + Bill);



        }


    }

}
-3
GeorgeSayegh 19 Фев 2016 в 04:54

3 ответа

Лучший ответ
/*
 * TMKRAY 
 * Febuary 18th 2016
 * program for phone plan corrected
 */
import java.util.*;
import java.util.Scanner;
import java.text.DecimalFormat;

public class Feb21716 {
   private static DecimalFormat df2 = new DecimalFormat(".##");
   public static void main(String[] args) {

double total;

System.out.println("Enter your wireless service carrier plan" 
+ "\n Package A: For $29.99 per month 2GB of data is provided. Additional data is $10.00 per GB." 
+ "\n Package B: For $39.99 per month 4GB of data is provided. Additional data is $5.00 per GB. "
+ "\n Package C: For $49.99 per month unlimited data is provided."
+ "\n Please enter only the letter in Upper Case ex. Package A = A");
Scanner sc = new Scanner(System.in);
String whichPackage = sc.nextLine();

System.out.println("Please enter the Amount of data you use in GB" 
+ "\n Please note, just enter the numbers "
+ "\n ex. 750 MB = .75  ");
Scanner dText = new Scanner(System.in);
double packageSize = dText.nextDouble();




if(( whichPackage .equals( "A" ))&&(packageSize <= 2)){
    // when Package is A and less than 2GB
    total = 29.99;
System.out.println("Your Bill is: " +df2.format(total));
} else if(( whichPackage .equals( "A" ))&&(packageSize > 2)) {
    // when package is A and more than 2GB
    total = 29.99 + 10 * (packageSize-2);  
System.out.println("Your Bill is: " + df2.format(total));
} else if(( whichPackage .equals( "B" ))&&(packageSize <= 4)) {
    // when package is B and less than 4GB
    total = 39.99; 
System.out.println("Your Bill is: " + df2.format(total));
} else if(( whichPackage .equals( "B" ))&&(packageSize > 4)){
    // when package is B and more than 4GB
    total = 29.99 + 10 * (packageSize-4);
System.out.println("Your Bill is: " + df2.format(total));
} else if(( whichPackage .equals( "C" ))&&(packageSize < 50)){
    // when package is C and less than 50gb
    total = 49.99;
System.out.println("Your Bill is: " + df2.format(total));
} else if(( whichPackage .equals( "C" ))&&(packageSize > 50)){
    // when package is C and more than 50gb
  total= 0;
System.out.println("You didnt enter a valid number "+total);
}



}
}
0
tmkray 19 Фев 2016 в 04:48

Вместо того, чтобы объявлять Package двойным, вы можете сделать его переменной char, а Data и Bill могут остаться двойными. Поскольку Package представляет собой однобуквенное значение (A, B, C), было бы лучше сохранить как char. Двойники представляют собой числовые значения, а не буквы.

Вот как это будет выглядеть в коде:

public static void main(String[] args) {

   double data, bill;
   char packageVal;
   char package_A, package_B, package_C;

   //Get Package
   String packagetext = JOptionPane.showInputDialog("Enter your wireless service carrier plan" 
+ "\n Package A: For $29.99 per month 2GB of data is provided. Additional data is $10.00 per GB." 
+ "\n Package B: For $39.99 per month 4GB of data is provided. Additional data is $5.00 per GB. "
+ "\n Package C: For $49.99 per month unlimited data is provided."
+ "\n Please enter only the letter in Upper Case ex. Package A = A");
packageVal = Packagetext.charAt(0);

   //Get Amount of Data Used
   String datatext = JOptionPane.showInputDialog("Please enter the Amount of data you use in GB" 
+ "\n Please note, just enter the numbers "
+ "\n ex. 750 MB = .75  ");

   data = Double.parseDouble(datatext);

   if(( packageVal == 'A' )&&(data <= 2)){
       // when Package is A and less than 2GB
       bill = 29.99;
   } else if ((packageVal == 'A')&&(data > 2)) {
       // when package is A and more than 2GB
       bill = 29.99 + 10 * Data;
   } else if ((packageVal == 'B')&&(data <= 4)) {
       // when package is B and less than 4GB
       bill = 39.99;
   } else if ((packageVal == 'B')&&(data > 4)){
       // when package is B and more than 4GB
       bill = 29.99 + 10 * Data;
   } else if ((packageVal == 'C')&&(data < 50)){
       // when package is C and less than 50gb
       bill = 49.99;
   } else if ((packageVal == 'C')&&(data > 50)){
       // when package is C and more than 50gb
       bill = JOptionPane.showMessageDialog(null, "You have entered an invalid Number");
   }

   JOptionPane.showMessageDialog(null, "Your bill is: $" + bill);

Этого должно быть достаточно, чтобы решить вашу проблему.

0
Limit 19 Фев 2016 в 04:14

Внутри операторов if вы сравниваете Package, который является double, с A,B и C, которые являются необъявленными переменными .

JOptionPane.showInputDialog("your text here");

Возвращает строку.

Лучше всего сделать что-то вроде следующего.

String userInput = JOptionPane.showInputDialog("Insert package A,B or C");

А затем внутри вашего оператора if используйте метод equals

    if(userInput.equals("A")) {
        // code to run if "A" is the userInput
    }

В заключение, постарайтесь следовать правильным соглашениям о коде, поскольку это значительно улучшит читаемость вашего кода для вас и других.

0
Ioannis Stefanou 19 Фев 2016 в 03:14