Java编码 - 程序在运行时挂起

时间:2015-01-24 01:30:17

标签: java compiler-errors

我遇到了Java代码的问题,我知道问题出在哪里,但我似乎无法弄清楚我需要做些什么来纠正它。有人可以帮忙吗?这是造成问题的线,我不知道如何解决它。 subtotal = sc.nextDouble();

import java.text.NumberFormat;
import java.util.InputMismatchException;
import java.util.Scanner;

public class InvoiceApp
{
    private static double subtotal;
    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in);
        String choice = "y";

        while (!choice.equalsIgnoreCase("n"))
        {
            // get the input from the user
            String customerType = getValidCustomerType(sc);
        try
        {
            System.out.print("Enter subtotal:   ");
            subtotal = sc.nextDouble();
        }
        catch (InputMismatchException e)
        {
            sc.next();
            System.out.println("Error!  Invalid number.  Try again. \n");
            continue;
        }
            // get the discount percent
            double discountPercent = 0.0;
            double subtotal = sc.nextDouble();

            if (customerType.equalsIgnoreCase("R"))
            {
                if (subtotal < 100)
                    discountPercent = 0;
                else if (subtotal >= 100 && subtotal < 250)
                    discountPercent = .1;
                else if (subtotal >= 250)
                    discountPercent = .2;
            }
            else if (customerType.equalsIgnoreCase("C"))
            {
                if (subtotal < 250)
                    discountPercent = .2;
                else
                    discountPercent = .3;
            }
            else
            {
                discountPercent = .1;
            }

            // calculate the discount amount and total
            double discountAmount = subtotal * discountPercent;
            double total = subtotal - discountAmount;

            // format and display the results
            NumberFormat currency = NumberFormat.getCurrencyInstance();
            NumberFormat percent = NumberFormat.getPercentInstance();
            System.out.println(
                    "Discount percent: " + percent.format(discountPercent) + "\n" +
                    "Discount amount:  " + currency.format(discountAmount) + "\n" +
                    "Total:            " + currency.format(total) + "\n");

            // see if the user wants to continue
            System.out.print("Continue? (y/n): ");
            choice = sc.next();
            System.out.println();
        }
    }
    private static String getValidCustomerType(Scanner sc)
    {
        String customerType = "";
        boolean isValid = false;
        while (isValid == false)
        {
            System.out.print("Enter customer type (r/c):  ");
            customerType = sc.next();
            if (!customerType.equalsIgnoreCase("r") && !customerType.equalsIgnoreCase("c"))
            {
                System.out.println("Invalid customer type.  Try again. \n");
            }
            else
            {
                isValid = true;
            }
            sc.nextLine();
        }
        return customerType;
    }
}

2 个答案:

答案 0 :(得分:1)

程序执行时不会挂起:

subtotal = sc.nextDouble();

而只是等待来自控制台的双值输入。输入一个值,其余的程序魔法应该遵循。

答案 1 :(得分:0)

问题是您有额外的电话会扫描那里的subtotal

try-catch区块中的一个

try
{
    System.out.print("Enter subtotal:   ");
    subtotal = sc.nextDouble();
}

然后在计算discountPercent

之前再使用另一个
// get the discount percent
double discountPercent = 0.0;
double subtotal = sc.nextDouble();

这就是让你两次输入金额的原因。只需删除第二个调用,程序就可以正常运行。