我如何测试代码来测试输入是否包含字符而不是数字

时间:2015-04-27 21:58:55

标签: java numbers logic

public void deposit (double amount){
    if (amount >= 0) {
    balance = balance + amount;
    } else {
        System.out.println("Your deposit is a negative number, If you would like to withdraw please enter '0' and select Withdraw.");
    }
        while (!double || !int) {
            System.out.println("Invalid Input. Try again");
        }
    }

这是代码,我试图测试在另一个类文件中输入的用户输入是否具有整数或双精度字符。我需要这段代码在这里工作,并且我已经在这个下面创建了一个撤销类,我想如果我可以让它在一个工作,它将在另一个工作。 提前谢谢!

以下是请求的代码:

import java.util.Scanner;
public class Bank {
double balance = 0;

Scanner in = new Scanner(System.in);
int userChoice;
BankAccount account1 = new BankAccount();
boolean quit = false; {
do {
System.out.println("Your Choice: ");
System.out.println("For Deposit type 1");
System.out.println("For Withdraw type 2");
System.out.println("For Check Balance type 3");
System.out.println("Type 0 to quit");
userChoice = in.nextInt();
switch (userChoice){
case 1: 

    //Deposit Money
    System.out.println("How Much would you like to deposit?");
    double amount;
    amount = in.nextDouble();
    System.out.println("Depositing: " + amount);
    account1.deposit(amount);
    //balance = amount + balance;
    break;
case 2: 
    //Withdraw money
    System.out.println("How much would you like to withdraw?");
    amount = in.nextDouble();
    System.out.println("Withdrawing: " + amount);
    account1.withdraw(amount);
    //balance = balance - amount;
    break;
case 3: 
    //check balance
    System.out.println("Checking Balance.");
    account1.getBalance();

    System.out.println(account1.balance);
    break;
case 0: 
    System.out.println("Thanks for Using BankAccount Banking System!");
    quit = true;
    break;
default: 
    System.out.println("Error: Choice not recognized please choose again.");
    continue;
}

if (userChoice ==  0)
    quit = true;
}while 
(!quit);
}
}

以下是代码第一部分的全部内容:

public class BankAccount {

public double balance;
public int sufficientFunds = 1;
public int insufficientFunds = -1;

public BankAccount(){
    balance = 0;
}


public BankAccount (double initialBalance){
    balance = initialBalance;
}


public void deposit (double amount){
    if (amount >= 0) {
    balance = balance + amount;
    } else {
        System.out.println("Your deposit is a negative number, If you would like to withdraw please enter '0' and select Withdraw.");
    }
        while (!double || !int) {
            System.out.println("Invalid Input. Try again");
        }
    }



public double withdraw (double amount){
    balance = balance - amount;

    if (balance == amount){
        return sufficientFunds;
    }else if (balance > amount){
        return sufficientFunds;
    }else if (balance < amount){
        System.out.println("INSUFFICENT FUNDS");
        return insufficientFunds;
    }
    return amount;

}


public double getBalance(){
    return balance;
}

}

3 个答案:

答案 0 :(得分:2)

Java是一种强类型语言,因此amount变量不可能包含除double之外的任何内容,这是一个数字。

答案 1 :(得分:0)

好的,所以当接受amount的输入时,用try-catch块包围它,而不是简单地

amount = in.nextDouble();

你会得到

try{
    amount = in.nextDouble();
}catch(InputMismatchException ime){
    //What to do if this is not a numerical value
}

此外,您还希望将其包含在do-while循环中,以便程序再次询问,直到接受有效输入:

boolean inputInvalid;
double amount;
do{
    System.out.println("How Much would you like to deposit?");
    try{
        amount = in.nextDouble();
        inputInvalid = false;
    }catch(InputMismatchException ime){
        //What to do if this is not a numerical value
        inputInvalid = true;
    }
}while(inputInvalid);

修改:由于in.nextDouble(),程序可能会不断尝试读取缓冲区中的\n(用户按下Enter时)。为了避免这种情况,在初始化Scanner对象之后(或者方法中的第一件事,如果它是类变量),添加

in.useDelimiter("\n");

让Java结束输入并忽略换行符。

答案 2 :(得分:0)

将此用于银行

import java.util.Scanner;

public class Bank {
    double balance = 0;

    Scanner in = new Scanner(System.in);
    int userChoice;
    BankAccount account1 = new BankAccount();
    boolean quit = false;
    public void thisShouldBeAMethod(){
        do {
            System.out.println("Your Choice: ");
            System.out.println("For Deposit type 1");
            System.out.println("For Withdraw type 2");
            System.out.println("For Check Balance type 3");
            System.out.println("Type 0 to quit");
            //userChoice = in.nextInt();
            String regex = "[0-9]+";
            String input = in.next(); 
            if(input.matches(regex)){
                userChoice = Integer.parseInt(input);
                switch (userChoice) {
                case 1:

                    // Deposit Money
                    System.out.println("How Much would you like to deposit?");
                    double amount;
                    amount = in.nextDouble();
                    System.out.println("Depositing: " + amount);
                    account1.deposit(amount);
                    // balance = amount + balance;
                    break;
                case 2:
                    // Withdraw money
                    System.out.println("How much would you like to withdraw?");
                    amount = in.nextDouble();
                    System.out.println("Withdrawing: " + amount);
                    account1.withdraw(amount);
                    // balance = balance - amount;
                    break;
                case 3:
                    // check balance
                    System.out.println("Checking Balance.");
                    account1.getBalance();

                    System.out.println(account1.balance);
                    break;
                case 0:
                    System.out
                            .println("Thanks for Using BankAccount Banking System!");
                    quit = true;
                    break;
                default:
                    System.out
                            .println("Error: Choice not recognized please choose again.");
                    continue;
                }

                if (userChoice == 0)
                    quit = true;
            }
            else{
                 System.out.println("Invalid Input. Try again");
            }

        } while (!quit);
    }
}

在BankAccount中更新此内容

public void deposit (double amount){
        if (amount >= 0) {
        balance = balance + amount;
        } else {
            System.out.println("Your deposit is a negative number, If you would like to withdraw please enter '0' and select Withdraw.");
        }
//          while (!double || !int) {
//              System.out.println("Invalid Input. Try again");
//          }
        }

并测试

public class Test {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Bank bank = new Bank();
        bank.thisShouldBeAMethod();
    }


}