1

经过长时间的努力,我终于(几乎)完成了我的 java 菜单程序。但是,我无法让我的返回更改功能在我的代码末尾工作。它给出了非常奇数的数字。有任何想法吗?

代码:

import java.io.*;
import java.text.*;
import java.util.*;

public class JavaBurger
{
    public static double amountowed = 0;
    public static double amount;
    public static double amount1 = 0;
    public static double amount2 = 0;
    public static double amount3 = 0;
    public static double amount4 = 0;
    public static double amount5 = 0;
    public static double amount6 = 0;
    public static double amount7 = 0;
    public static double amount8 = 0;
    public static double amount9 = 0;
    public static double amount10 = 0;


    static ArrayList MenuItems = new ArrayList();

    public static void main(String[] args)
    {
        InputStreamReader inp = null;
        BufferedReader input = null;
        int nOption  = 0;
    DecimalFormat x = new DecimalFormat("###.##");


        try
        {
            inp = new InputStreamReader(System.in);
            input = new BufferedReader(inp);
            while(true)
            {
        System.out.println("Choose a Menu Option");
                System.out.println("1. Burger - 13.49");
                System.out.println("2. Pasta - 16.79");
                System.out.println("3. Salad - 13.49");
                System.out.println("4. Salmon - 18.99");
                System.out.println("5. Chicken - 16.99");
                System.out.println("6. Nachos - 13.99");
        System.out.println("7. Soup - 6.99");
        System.out.println("8. Fajitas - 18.49");
        System.out.println("9. Ribs - 23.99");
        System.out.println("10. Calamari-9.99");
        System.out.println("11. Clear Order");
        System.out.println("12. Finish Order");
                System.out.println("\nChoose an option(1-12) >> ");
        System.out.println("Subtotal: $" + x.format(amount));
        System.out.println("Total: $" + x.format(amount * 1.13));
        System.out.println("For error correction, choose an option and enter a negative value to void the item.");

                nOption = Integer.parseInt(input.readLine());

                switch(nOption)
                {
                    case 1:
                        Burger(input);
                        break;
            case 2:
                        Pasta(input);
                        break;
            case 3:
                        Salad(input);
                        break;
            case 4:
                        Salmon(input);
                        break;
            case 5:
                        Chicken(input);
                        break;
                    case 6:
                        Nachos(input);
                        break;
                    case 7:
                        Soup(input);
                        break;
                    case 8:
                        Fajitas(input);
                        break;
                    case 9:
                        Ribs(input);
                        break;
                    case 10:
                        Calamari(input);
                        break;
            case 11:
            Clear(input);
            break;
            case 12:
            Finish(input);
            break;

                }
            }
        }
        catch(Exception exp)
        {
        }
    }

    private static void Burger(BufferedReader input) throws IOException
    {

        while(true)
        {

            System.out.println("How many Burgers would you like? ");
        int a = Integer.parseInt(input.readLine());

        double aaa = Math.pow(1 + a, a);
            amount1 = (a * 13.49);
        amount += amount1;


                break;
        }
    }

     private static void Pasta(BufferedReader input) throws IOException
    {
        while(true)
        {

            System.out.println("How many orders of Pasta would you like? ");
        int b = Integer.parseInt(input.readLine());

        double bbb = Math.pow(1 + b, b);
            amount2 = (bbb * 16.79);
        amount += amount2;


                break;
        }
    } private static void Salad(BufferedReader input) throws IOException
    {
        while(true)
        {

            System.out.println("How many Salads would you like? ");
        int c = Integer.parseInt(input.readLine());

        double ccc = Math.pow(1 + c, c);
            amount3 = (ccc * 13.49);
        amount += amount3;


                break;
        }
    } private static void Salmon(BufferedReader input) throws IOException
    {

        while(true)
        {

            System.out.println("How many orders of Salmon would you like? ");
        int d = Integer.parseInt(input.readLine());

        double ddd = Math.pow(1 + d, d);
            amount4 = (ddd * 18.99);
        amount += amount4;


                break;
        }
    } private static void Chicken(BufferedReader input) throws IOException
    {

        while(true)
        {

            System.out.println("How many orders of Chicken would you like? ");
        int e = Integer.parseInt(input.readLine());

        double eee = Math.pow(1 + e, e);
            amount5 = (eee * 16.99);
        amount += amount5;


                break;
        }
    } private static void Nachos(BufferedReader input) throws IOException
    {

        while(true)
        {

            System.out.println("How many orders of Nachos would you like? ");
        int f = Integer.parseInt(input.readLine());

        double fff = Math.pow(1 + f, f);
            amount6 = (fff * 13.99);
        amount += amount6;

                break;
        }
    } private static void Soup(BufferedReader input) throws IOException
    {
        while(true)
        {

            System.out.println("How many orders of Soup would you like? ");
        int g = Integer.parseInt(input.readLine());

        double ggg = Math.pow(1 + g, g);
            amount7 = (ggg * 6.99);
        amount += amount7;

                break;
        }
    } private static void Fajitas(BufferedReader input) throws IOException
    {

        while(true)
        {

            System.out.println("How many orders of 2 Fajitas would you like? ");
        int h = Integer.parseInt(input.readLine());

        double hhh = Math.pow(1 + h, h);
            amount8 = (hhh * 18.49);
        amount += amount8;

                break;
        }
    } private static void Ribs(BufferedReader input) throws IOException
    {

        while(true)
        {

            System.out.println("How many racks of Ribs would you like? ");
        int i = Integer.parseInt(input.readLine());

        double iii = Math.pow(1 + i, i);
            amount9 = (iii * 23.99);
        amount += amount9;

                break;
        }
    } private static void Calamari(BufferedReader input) throws IOException
    {

        while(true)
        {

            System.out.println("How many orders of Calamari would you like? ");
        int j = Integer.parseInt(input.readLine());

        double jjj = Math.pow(1 + j, j);
            amount10 = (jjj * 9.99);
        amount += amount10;

                break;
        }
    } private static void Clear(BufferedReader input) throws IOException
    {

    while(true)
    {

        amount = 0;

        break;
    }
    } private static void Finish(BufferedReader input) throws IOException
    {

    while(true)
    {

        DecimalFormat x = new DecimalFormat("###.##");
        System.out.println("Amount Due");
        System.out.println("**********");
        System.out.println("Subtotal:" + x.format(amount));
        System.out.println("Total:" + x.format(amount * 1.13));
        System.out.println("Please enter the amount tendered");
        int k = Integer.parseInt(input.readLine());
        double kk = Math.pow(1 + k, k);
        amountowed = ((amount * 1.13) - kk);
        if(amountowed == 0)
        {
        System.out.println("Thanks for paying with exact change!");
        System.exit(0);
        }
        else if(amountowed < 0)
        {
        System.out.println("Change due:" + x.format(amountowed * -1.00));
        System.exit(0);
        }
        else
        {
        System.out.println("Amount still owed:" + x.format(amountowed * -1.00));
        }
    }
    }
}

结果:

Choose a Menu Option
1. Burger - 13.49
2. Pasta - 16.79
3. Salad - 13.49
4. Salmon - 18.99
5. Chicken - 16.99
6. Nachos - 13.99
7. Soup - 6.99
8. Fajitas - 18.49
9. Ribs - 23.99
10. Calamari-9.99
11. Clear Order
12. Finish Order

Choose an option(1-12) >>
Subtotal: $0
Total: $0
For error correction, choose an option and enter a negative value to void the it
em.
1
How many Burgers would you like?
1
Choose a Menu Option
1. Burger - 13.49
2. Pasta - 16.79
3. Salad - 13.49
4. Salmon - 18.99
5. Chicken - 16.99
6. Nachos - 13.99
7. Soup - 6.99
8. Fajitas - 18.49
9. Ribs - 23.99
10. Calamari-9.99
11. Clear Order
12. Finish Order

Choose an option(1-12) >>
Subtotal: $13.49
Total: $15.24
For error correction, choose an option and enter a negative value to void the it
em.
12
Amount Due
**********
Subtotal:13.49
Total:15.24
Please enter the amount tendered
100
Change due:270481382942152600000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000

为什么我收到的更改到期数字古怪?

4

5 回答 5

10

嗯...这里需要以下行吗?

double kk = Math.pow(1 + k, k);

它完全搞砸了更改计算,因为您为用户输入的 (k) + 1 的 k 次方提供了动力。

如果您想将其更改为双精度,(double)k则可以。当然,对于货币计算,您最好使用:

  1. 大十进制
  2. 基于美分Integer/Long计算
于 2013-05-13T14:01:45.807 回答
2

我很难理解为什么你让你的变更计算过于复杂。你不能简单地计算amount tendered - total吗?

于 2013-05-13T14:02:35.983 回答
1
 int e = Integer.parseInt(input.readLine());
 double eee = Math.pow(1 + e, e);

假设我想要 5 样东西。

 double eee = Math.pow(1 + 5, 5)

这是 6 * 6 * 6 * 6 * 6(即一个非常大的数字)。我想你只想要一个简单的乘法?

于 2013-05-13T14:03:31.427 回答
1

如果您想从字符串中获取双精度,请使用 Double.parseDouble 而不是 Integer.parseInt。不要进行额外的 pow 计算,这会使您的结果完全错误。

更一般地说,随机添加代码行很少是编译器错误报告的好方法。了解正在发生的事情并故意解决该问题要好得多。

在某些时候,您可能实际上会遇到浮点舍入错误,并且会再次被建议使用 BigDecimal 而不是 double。

于 2013-05-13T14:06:57.157 回答
0

第一件事首先...

  1. 你不需要不必要的 while 循环(在下面的代码中修复)
  2. Math.pow(1 + a, a) 不需要。(固定在下面的代码中)
  3. amount1 , amount 2 等可以声明为局部变量(在下面的代码中未修复),因为它不会造成伤害
private static void Burger(BufferedReader input) throws IOException
{
    System.out.println("How many Burgers would you like? ");
    int a = Integer.parseInt(input.readLine());
  //  double aaa = Math.pow(1 + a, a);// Why THis??? 
  amount1 = ((double)a * 13.49);
    amount += amount1;

}

 private static void Pasta(BufferedReader input) throws IOException
{
    System.out.println("How many orders of Pasta would you like? ");
    int b = Integer.parseInt(input.readLine());

   // double bbb = Math.pow(1 + b, b); You dont need this 
    amount2 = ((double)b * 16.79);
    amount += amount2;

} 
private static void Salad(BufferedReader input) throws IOException
{
    System.out.println("How many Salads would you like? ");
    int c = Integer.parseInt(input.readLine());

    //double ccc = Math.pow(1 + c, c); No Need of this again 
        amount3 = ((double)c * 13.49);
    amount += amount3;

    }
} private static void Salmon(BufferedReader input) throws IOException
{

    System.out.println("How many orders of Salmon would you like? ");
    int d = Integer.parseInt(input.readLine());

    //double ddd = Math.pow(1 + d, d); No Need
    amount4 = ((double)d * 18.99);
    amount += amount4;
}
 private static void Chicken(BufferedReader input) throws IOException
 {

    System.out.println("How many orders of Chicken would you like? ");
    int e = Integer.parseInt(input.readLine());
    amount5 = ((double)e * 16.99);
    amount += amount5;

}
 private static void Nachos(BufferedReader input) throws IOException
{

    System.out.println("How many orders of Nachos would you like? ");
    int f = Integer.parseInt(input.readLine());

    amount6 = ((double)f * 13.99);
    amount += amount6;

}
 private static void Soup(BufferedReader input) throws IOException
{
    System.out.println("How many orders of Soup would you like? ");
    int g = Integer.parseInt(input.readLine());

    amount7 = ((double)g * 6.99);
    amount += amount7;

}
 private static void Fajitas(BufferedReader input) throws IOException
{
    System.out.println("How many orders of 2 Fajitas would you like? ");
    int h = Integer.parseInt(input.readLine());
     amount8 = ((double)h * 18.49);
    amount += amount8;

}
private static void Ribs(BufferedReader input) throws IOException
{
    System.out.println("How many racks of Ribs would you like? ");
    int i = Integer.parseInt(input.readLine());
     amount9 = ((double)i * 23.99);
    amount += amount9;

}
 private static void Calamari(BufferedReader input) throws IOException
{

    System.out.println("How many orders of Calamari would you like? ");
    int j = Integer.parseInt(input.readLine());

    amount10 = ((double)j * 9.99);
    amount += amount10;

}
 private static void Clear(BufferedReader input) throws IOException
{
    amount = 0;

}
private static void Finish(BufferedReader input) throws IOException
{
amountowed =amount * 1.13
DecimalFormat x = new DecimalFormat("###.##");

while(amountowed >0)
{
    System.out.println("Amount Due");
    System.out.println("**********");
    System.out.println("Subtotal:" + x.format(amount));
    System.out.println("Total:" + x.format(amountowed));
    System.out.println("Please enter the amount tendered");
    double k = Double.parseDouble(input.readLine());
   // double kk = Math.pow(1 + k, k); No Need
    amountowed = (amountowed  - k);
    if(amountowed == 0)
    {
        System.out.println("Thanks for paying with exact change!");
        System.exit(0);
    }
    else if(amountowed < 0)
    {
        System.out.println("Change due:" + x.format(amountowed * -1.00));
        System.exit(0);
    }
    else
    {
        System.out.println("Amount still owed:" + x.format(amountowed));
    }

    }
}
于 2013-05-13T14:32:22.547 回答