【java】Scanner的方法(next,nextLine,nextInt)及写一个模拟计算器

先看一下nextLine,nextInt和next方法的原理吧:

  • nextLine() 方法会以回车符作为截止,将回车符连同之前的所有字符都读取出来,然后将会车符丢掉,把读取的之前的所有字符组合成一个完整的字符串,交换给我们。
  • nextInt() 方法也是以回车符作为截止,但是只读取回车符之前的所有字符,而回车符留在了消息队列中。
  • next() 方法和nextInt方法一样,它们不读取回车符;但next()方法看到空格也截止,而nextLine只看到回车符才截止。

nextLine(),nextInt()连用涉及到的问题

先看一个代码(这两个方法连用时:先用nextLine方法,后用nextInt方法):

import java.util.Scanner;

public class Demo
{

    public static void main(String[] args)
    {
        Scanner input =  new Scanner(System.in);
        System.out.println("请输入账号");
        String name = input.nextLine(); //先用nextLine方法
        
        //假定密码只能是数字
        System.out.println("请输入密码");
        int password = input.nextInt();  //后用nextInt方法

        System.out.println("接收到了账号:" + name);
        System.out.println("请输入密码:" + password);
    }
}
//运行,输出没有出现问题

【java】Scanner的方法(next,nextLine,nextInt)及写一个模拟计算器
再看一个代码,先用nextInt方法,后用nextLine方法(此时,出现了问题)

import java.util.Scanner;

public class Demo
{

    public static void main(String[] args)
    {
        Scanner input =  new Scanner(System.in);
        //假定密码只能是数字
        System.out.println("请输入密码");
        int password = input.nextInt();  //先用nextInt方法
       
        System.out.println("请输入账号");
        String name = input.nextLine();   //后用nextLine方法

        System.out.println("接收到了账号:" + name);
        System.out.println("请输入密码:" + password);
    }
}
//问题出现了

输完密码后,还没输入账号,但是代码自动往后执行下去了
【java】Scanner的方法(next,nextLine,nextInt)及写一个模拟计算器
为什么呢?因为先用nextInt方法,消息队列中留下了一个回车符,然后调用nextLine方法时,它一开始就读取到回车符,直接截止(然后丢掉了回车符,相当于什么都没读取,)程序往下执行

怎么解决上面出现的问题呢?

第一种解决办法,用nextLine方法把回车符读取掉

import java.util.Scanner;

public class Demo
{

    public static void main(String[] args)
    {
        Scanner input =  new Scanner(System.in);
        //假定密码只能是数字
        System.out.println("请输入密码");
        int password = input.nextInt();
        input.nextLine();                         //用nextLine方法把回车符读取掉

        System.out.println("请输入账号");
        String name = input.nextLine();

        System.out.println("接收到了账号:" + name);
        System.out.println("请输入密码:" + password);
    }
}

【java】Scanner的方法(next,nextLine,nextInt)及写一个模拟计算器

第二种解决办法,利用next方法读取账号

import java.util.Scanner;

public class Demo
{

    public static void main(String[] args)
    {
        Scanner input =  new Scanner(System.in);
        //假定密码只能是数字
        System.out.println("请输入密码");
        int password = input.nextInt();

        System.out.println("请输入账号");
        String name = input.next();   //换成next方法

        System.out.println("接收到了账号:" + name);
        System.out.println("请输入密码:" + password);
    }
}

【java】Scanner的方法(next,nextLine,nextInt)及写一个模拟计算器

第三种解决办法,都使用nextLine方法(推荐使用)

上面两种方法都不太好,第一方法多了一行东西,第二种方法,消息队列中留下了一个回车符(很容易出现问题)

import java.util.Scanner;

public class Demo
{

    public static void main(String[] args)
    {
        Scanner input =  new Scanner(System.in);
        
        //假定密码只能是数字
        System.out.println("请输入密码");
        int password = Integer.parseInt(input.nextLine());
        //要将String类型的密码转化成int,用包装类

        System.out.println("请输入账号");
        String name = input.nextLine();

        System.out.println("接收到了账号:" + name);
        System.out.println("请输入密码:" + password);
    }
}

写一个模拟计算器(就只包含 + - * /)

import java.util.Scanner;

class Calculator
{
    public float add(float x,float y){
        return x+y;
    }

    public float subtraction(float x,float y){
        return x-y;
    }

    public float multiplication(float x,float y){
        return x*y;
    }

    public float divison(float x,float y){
        return x/y;
    }

    //设计一个方法,控制计算器计算的流程
    public void calculate(){
        Scanner input = new Scanner(System.in);
        System.out.println("请输入第一个数字:");
        float one = Float.parseFloat(input.nextLine());

        while(true){
            System.out.println("请输入符号:");
            String symbol = input.nextLine();
            
            if(symbol.equals("=")){           //以=作为执行结束的标志
                System.out.println("执行完毕");
                break;
            }
            if(!(symbol.equals("+")||symbol.equals("-")||symbol.equals("*")||symbol.equals("/"))){
                System.out.println("输入符号有误,只能输入 + - * / 其中的一个");
                continue;
            }
            System.out.println("请输入后面的数字:");
            float two = Float.parseFloat(input.nextLine());

            switch(symbol){
                case "+":
                    one = this.add(one,two);
                    break;
                case "-":
                    one = this.subtraction(one,two);
                    break;
                case "*":
                    one = this.multiplication(one,two);
                    break;
                case "/":
                    one = this.divison(one,two);
                    break;    
            }
            System.out.println(one);
        }
    }
}

public class Demo
{
    public static void main(String[] args)
    {
        Calculator demo = new Calculator();
        demo.calculate();
    }
}

【java】Scanner的方法(next,nextLine,nextInt)及写一个模拟计算器