Java 对计算不同会员级别折扣的代码进行调试时遇到困难

Java 对计算不同会员级别折扣的代码进行调试时遇到困难,java,debugging,printf,Java,Debugging,Printf,总而言之,这段代码应该询问客户姓名、成员级别和原始购买价格。它应该将所有这些存储在各自的变量中,如果输入的不是可接受的成员级别,则程序应该退出。存储所有变量后,客户的姓名、会员级别、原始购买价格、促销价格和节省的金额应以本文末尾的格式打印出来。提前感谢您的帮助 import java.util.*; public class Discount{ public static void main(String[] args){ Scanner keyboard = new Scanner

总而言之,这段代码应该询问客户姓名、成员级别和原始购买价格。它应该将所有这些存储在各自的变量中,如果输入的不是可接受的成员级别,则程序应该退出。存储所有变量后,客户的姓名、会员级别、原始购买价格、促销价格和节省的金额应以本文末尾的格式打印出来。提前感谢您的帮助

import java.util.*;
public class Discount{
  public static void main(String[] args){
    Scanner keyboard = new Scanner(System.in);
    double purchase = 0.0;
    double platinum = (purchase * .2);
    double gold = (purchase * .15);
    double silver = (purchase * .1);
    String Platinum = null;
    String Gold = null;
    String Silver = null;
    String customerName = null;
    String level = null;
    double discount = 0.0;

    System.out.print("Please enter a customer name: ");
    customerName = keyboard.nextLine();
    System.out.print("Please enter the customer's member level: ");
    level = keyboard.nextLine();

    if (!level.equals("Platinum") && !level.equals("Gold") && !level.equals("Silver"))
    {
        System.exit(0);
    }

    System.out.print("Please enter the origianl purchase price: ");
    purchase = keyboard.nextDouble();

    System.out.println("Congratualations, " + customerName + "!");

    if (level.equals("Platinum") && purchase > 500)
    {
        discount = (platinum + (purchase*.05));
        System.out.println("As a " + level + " level cardholder, you have received a 25% discount during Bedlam.");
    }
    else if (level.equals("Platinum"))
    {
        discount = (platinum);
        System.out.println("As a " + level + " level cardholder, you have received a 20% discount during Bedlam.");
    }
    else if (level.equals("Gold"))
    {
        discount = (gold);
        System.out.println("As a " + level + " level cardholder, you have received a 15% discount during Bedlam.");
    }
    else if (level.equals("Silver"))
    {
        discount = (silver);
        System.out.println("As a " + level + " level cardholder, you have received a 10% discount during Bedlam.");
    }
到目前为止,一切都很正常,如果我输入M作为customerName,输入Silver作为level,输入500.20作为purchase,这就是在命令提示符中打印出来的内容: 祝贺你,M! 作为银级持卡人,您在混乱期间可享受10%的折扣。 线程“main”java.util.IllegalFormatConversionException中的异常:f!=java.lang.String 位于java.util.Formatter$FormatSpecifier.failConversion(未知源) 位于java.util.Formatter$FormatSpecifier.printFloat(未知源) 位于java.util.Formatter$FormatSpecifier.print(未知源) 位于java.util.Formatter.format(未知源) 位于java.io.PrintStream.format(未知源) 位于java.io.PrintStream.printf(未知源) 在Discount.main(Discount.java:62)

这是成功执行时的外观:

Congratulations, Marge Simpson!
As a Silver level cardholder, you received a 10% discount during Bedlam.
Original purchase price: $500.20
Promotional price: $450.18
Amount saved: $50.02 */
    }
}
参考。 请尝试以下语法:

System.out.println( "Original purchase price: $" + String.format("%.2f",purchase));
System.out.println("Promotional price: $" + String.format("%.2f",discount));
System.out.println("Amount saved: $" + String.format("%.2f", purchase-discount));

现在,您基本上正在传递整个字符串
“原始购买价格:$”+purchase
,作为
%.2f
的参数。改用
String.format

System.out.println("Original purchase price: $" + String.format("%.2f", purchase));

这也消除了将
“\n”
附加到字符串的需要,因为您可以使用
System.out.println

这一有效方法,但它不会将任何内容读入折扣变量。有什么建议吗?这里的一切都初始化为0:double purchase=0.0;双白金=(购买*.2);双倍黄金=(购买*.15);双银=(购买*.1);在
purchase
设置为非零后,应将每个变量乘以
purchase
value@TreyJonn:由于这可能是一项家庭作业,今后请像我在评论中所做的那样给出提示,而不是给出答案。我知道,当我不得不在几乎没有或根本没有帮助的情况下解决一个问题时,我学到了很多东西。这很有效,只是它没有读入折扣变量中的任何内容。有什么建议吗?如果“不在折扣变量中读取任何内容”,您的意思是它被设置为0,对吗?仔细看看你的代码,你就会明白为什么。(提示:请看等号左侧的五个位置
折扣
。注意右侧的值吗?)
System.out.println("Original purchase price: $" + String.format("%.2f", purchase));