繁体   English   中英

如何在java中将输入限制为数字

[英]how to restrict input only as numbers in java

我编写计算器只是为了好玩。 我解决了大部分错误,除了一个错误,如何将输入限制为数字。 在执行程序时,我意识到如果我输入一个字母字符而不是数字,它会给我一个错误。 谁能帮我制作一个循环,以便如果输入非数字,循环将继续直到输入数字? 这是计算器的代码:

import java.text.DecimalFormat;
import java.util.Scanner;
class Calculator
{
    public static void main(String arg[])
    {
        try (
        Scanner Number$1 = new Scanner(System.in)) 
        {
            double Number1;
            System.out.println("Enter Number 1"); 
            Number1= Number$1.nextDouble();
            try (
            Scanner Number$2 = new Scanner(System.in)) 
            {
                double Number2;
                System.out.println("Enter Number 2"); 
                Number2 = Number$2.nextDouble();
                //to make ui better
                String a= "The addition of the two numbers is: ";
                String b= "The subtraction of the two numbers is: ";
                String c= "The multiplication of the two numbers is: ";
                String d= "The division of the two numbers is: ";
                String Options= "";
                try (Scanner scan = new Scanner(System.in)) {
                    System.out.println("Do You Want To Add, Subtract, Multiply, Divide? ");
                    System.out.println("a: Add");
                    System.out.println("b: Subtract");
                    System.out.println("c: Multiply");
                    System.out.println("d: Divide");
                    Options = scan.nextLine();
                }
                double add= Number1+Number2;
                double sub= Number1-Number2;
                double multi= Number1*Number2;
                double div= Number1/Number2;
                if(Options.equals("a"))
                {
                    if(((add*10)%10==0)==true)
                    {
                        DecimalFormat format= new DecimalFormat();
                        format.setDecimalSeparatorAlwaysShown(false);
                        System.out.println(a+(format.format(add)));
                    }
                    if(((add*10)%10==0)==false)
                    {
                        System.out.println(a+(add));
                    }
                }
                if(Options.equals("b"))
                {
                    if(((sub*10)%10==0)==true)
                    {
                        DecimalFormat format= new DecimalFormat();
                        format.setDecimalSeparatorAlwaysShown(false);
                        System.out.println(b+(format.format(sub)));
                    }
                    if(((sub*10)%10==0)==false)
                    {
                        System.out.println(b+(sub));
                    }
                }
                if(Options.equals("c"))
                {
                    if(((multi*10)%10==0)==true)
                    {
                        DecimalFormat format= new DecimalFormat();
                        format.setDecimalSeparatorAlwaysShown(false);
                        System.out.println(c+(format.format(multi)));
                    }
                    if(((multi*10)%10==0)==false)
                    {
                        System.out.println(c+(multi));
                    }
                }
                if(Options.equals("d"))
                {
                    if(((div*10)%10==0)==true)
                    {
                        DecimalFormat format= new DecimalFormat();
                        format.setDecimalSeparatorAlwaysShown(false);
                        System.out.println(d+(format.format(div)));
                    }
                    if(((div*10)%10==0)==false)
                    {
                        System.out.println(d+(div));
                    }
                }
            }
        }     
    }
}

尝试这个:

double number1;
double number2;
boolean validInput = false;
Scanner scanner = new Scanner(System.in))
while(!validInput){
    System.out.println("Enter Number 1");
    if(scanner.hasNextDouble()){
        validInput = true;
        number1 = scanner.nextDouble();
    }
}

validInput = false;
while(!validInput){
    System.out.println("Enter Number 2");
    if(scanner.hasNextDouble()){
        validInput = true;
        number2 = scanner.nextDouble();
    }
}

关于代码风格的几点说明:

  • 让多个扫描仪监听 System.in 通常是不好的做法

  • 变量的命名约定遵循驼峰命名法,因此“number1”不是“Number1”,但这并不是什么大问题。

  • 为了代码的可读性,请考虑添加注释来解释嵌套 if 块内的条件。

祝你编程工作好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM