Java扫描程序/输入帮助(输入不匹配异常) 奖金建议:

atm程序。当您按数字时,它会将您重定向到一个选项。例如2 =存款。它要求提款或按“ b”进入主菜单。如果您输入要存入的金额,则可以正常使用。如果按“ b”进入主菜单,它将无法正常工作并发送输入不匹配异常

static double balance = 0.0;
public static void deposit(double amount)
{
    balance = balance + amount;
}

public static void withdraw(double amount)
{
    balance = balance - amount;
}


private static void transaction()
{
    Scanner input = new Scanner(System.in);
    System.out.println("Welcome to the ATM");
    System.out.println("1 for balance\n2 for deposit\n3 for withdraw");
    int choice = input.nextInt();
    switch (choice) {
    case 1:
        System.out.println("Your balance is " + balance);

        transaction();
    case 2:
        System.out.println("Enter the amount or 'b' to go back");
        if (input.nextLine() == "b")
        {
        transaction();
        }
        else 
        {
        deposit(input.nextDouble());
        System.out.println("Success!");
        transaction();
        }***
    case 3:
        if (balance >= 0)
        {
            System.out.println("Your balance is negative!");
        }
        else
        {
        System.out.println("Enter the amount");
        withdraw(input.nextDouble());
        System.out.println("Success!");
        transaction();
        }
    default:
        System.out.println("Enter a valid option");
        transaction();
    }
}
fgfliang123 回答:Java扫描程序/输入帮助(输入不匹配异常) 奖金建议:

使用.quals()代替==进行相等性检查-

  

input.nextLine().equals("b")

奖金建议:

您不应直接在if()内部进行输入,而应首先将用户输入作为String。然后检查其b是否已转换为double并存入!

String userInput = input.next();

if (userInput.equals("b")) {
    transaction();
} else {
    try {
        double depositAmount = Double.parseDouble(userInput);
        deposit(depositAmount);
    } catch (NumberFormatException ex) {
        System.out.println("Invalid input");
    }
}
,

由于用户有一段时间可以在字符前后输入空白,因此最好对用户输入进行修剪。 我甚至建议在输入条件之前进行空检查,因为否则情况甚至可以用于空输入。 为了避免NullPointerException,始终将equals与作为常量的字段用作第一个参数始终是一种良好的编码习惯。  导入java.util.Scanner;

public class Test {

    static double balance = 0.0;
    public static void deposit(double amount)
    {
        balance = balance + amount;
    }

    public static void withdraw(double amount)
    {
        balance = balance - amount;
    }


    private static void transaction()
    {
        Scanner input = new Scanner(System.in);
        System.out.println("Welcome to the ATM");
        System.out.println("1 for balance\n2 for deposit\n3 for withdraw");
        int choice = input.nextInt();
        switch (choice) {
        case 1:
            System.out.println("Your balance is " + balance);

            transaction();
        case 2:
            System.out.println("Enter the amount or 'b' to go back");
            String temp = input.nextLine().trim();
            if(!temp.isEmpty()) {
                if ("b".equals(temp))   // since user some time can enter white space before or after character                                        // I would suggest even to make a null check before entering box.
                { 
                transaction();
                }
                else 
                {
                deposit(input.nextDouble());
                System.out.println("Success!");
                transaction();
                }
            }
        case 3:
            if (balance >= 0)
            {
                System.out.println("Your balance is negative!");
            }
            else
            {
            System.out.println("Enter the amount");
            withdraw(input.nextDouble());
            System.out.println("Success!");
            transaction();
            }
        default:
            System.out.println("Enter a valid option");
            transaction();
        }
    }


}

希望这会有所帮助。

本文链接:https://www.f2er.com/3169086.html

大家都在问