Scanner与循环

用户交互Scanner

hasnext()与next()

hasNextInt()nextInt() 都是 Scanner 类的方法,其中:

  • hasNextInt() 方法是用于判断下一个输入是否是 int 型数据。如果是,则返回 true,否则返回 false。调用该方法并不会将输入从缓冲区中移除。
  • nextInt() 方法是用于读取下一个 int 类型的输入数据。如果缓冲区中下一个输入是一个有效的 int 类型的值,则读取该值,并返回。如果下一个输入不能解释为 int 类型,则抛出 InputMismatchException 异常。

因此,这两个方法常常会被一起使用,以此来确保下一个输入是一个有效的 int 类型数据。通常的使用方法是先调用 hasNextInt() 方法,如果其返回值为 true,则可以调用 nextInt() 方法来获取输入数据。如果返回值为 false,则需要提示用户输入格式不正确,并可能需要再次进行输入操作。

使用next()接收

  • 一定要读取到有效字符后才能结束
  • 以空白为结束符
  • next()不能得到带有空格的字符串
import java.util.Scanner;

public class Demo01 {
    public static void main(String[] args) {
        //创建一个扫描器对象,用于接收键盘数据
        Scanner scanner=new Scanner(System.in);
        //类名  对象名
        System.out.println("使用nexe方式接收:");
        //判断用户有没有输入字符串
        if(scanner.hasNext()){
            //使用next方式接收
            String str=scanner.next();
            System.out.println("输出的内容为:"+str);
        }
        //凡是IO流的类如果不关闭会一直占用资源,养成良好习惯用完就关
        scanner.close();
    }
}

使用nextLine()接收

  • 以Enter为结束符,也就是说返回的是回车之前的所有字符
  • 可以获得空白
import java.util.Scanner;

public class Demo02 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        System.out.println("使用nextLine方式接收:");
        
        if(scanner.hasNextLine()){
            String str=scanner.nextLine();
            System.out.println("输出内容为:"+str);
        }
        scanner.close();
    }
}

使用if判断

import java.util.Scanner;

public class Demo04 {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);

        int i=0;
        float f=0.0f;

        System.out.println("请输入整数:");
        //如果输入的是整数
        if(scanner.hasNextInt()) {
            i = scanner.nextInt();
            System.out.println("整数数据:"+i);
        }else{
            System.out.println("输入的不是整数数据!");
        }

        //如果输入的是小数
        System.out.println("请输入小数:");
        if(scanner.hasNextFloat()) {
            f = scanner.nextFloat();
            System.out.println("小数数据:"+f);
        }else{
            System.out.println("输入的不是小数数据!");
        }

        scanner.close();
    }
}

执行结果:

请输入整数: 10.1 输入的不是整数数据! 请输入小数: 小数数据:10.1

这是因为 scanner.hasNextFloat() 方法会检查输入的下一个标记是否可以解释为 float 类型,如果可以,则读取并返回该标记。如果不能,则该方法不会等待输入者输入,而是会立即返回 false。在这个例子中,首先会读取用户输入的整数数据,如果该数据是整数,则使用 nextInt() 方法读取并返回该整数数据。而如果该输入数据不是整数类型,则直接输出提示信息 "输入的不是整数数据!",不会阻塞等待用户输入,因此在输入了 10.1 之后,由于该值并不是整数类型,所以直接输出 "输入的不是整数数据!",然后会进入下一个判断条件,此时因为已经输入了 10.1,所以该值仍然会被视为 float 类型,并且直接输出 "小数数据:10.1"。因此,你输入一个小数 10.1 后,只会输出一次 "小数数据:10.1",而不会让你重新输入。


if实例

import java.util.Scanner;

public class Demo01 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        String str=scanner.nextLine();

        if(str.equals("Hello"))//判断字符串是否等于指定的
        {
            System.out.println("true");
        }
        else
        {
            System.out.println("end");
        }
    }
}

使用while循环

import java.util.Scanner;

public class Demo05 {
    public static void main(String[] args) {
        //输入多个数字,并求其总和与平均数,每次输入一个数用回车确认,通过输入非数字来结束输入并输出结果
        Scanner scanner = new Scanner(System.in);

        double sum=0;
        int m=0;
        while(scanner.hasNextDouble()){
            double x=scanner.nextDouble();
            m++;
            sum+=x;
            System.out.println("你输入了第"+m+"个数,当前结果sum="+sum);
        }
        System.out.println(m+"个数的和为:"+sum);
        System.out.println(m+"个数的平均值为:"+(sum/m));

        scanner.close();

    }
}

常规for循环

public class Demo99 {
    public static void main(String[] args) {
        int i,j;
        for(i=1;i<10;i++) {
            for(j=1;j<=i;j++) {
                System.out.print(j+"*"+i+"="+(j*i)+"\t");
            }
            System.out.println();
        }
    }
}

增强型for循环

public class Demo4 {
    public static void main(String[] args) {
        int [] nums={10,20,30,40,50};
		//增强型for循环,主要用于数组或集合
        for(int x:nums)
        {
            System.out.println(x);
        }
    }
}

输出:

10 20 30 40 50

用for循环打印菱形

public class Tran {
    public static void main(String[] args) {
        int n=5;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n-i;j++){
                System.out.print(" ");
            }
            for(int k=1;k<=2*i-1;k++)
            {
                System.out.print("*");
            }
            System.out.println();
        }

        for(int i=n-1;i>=1;i--){
            for(int j=1;j<=n-i;j++){
                System.out.print(" ");
            }
            for(int k=1;k<=2*i-1;k++)
            {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

posted @ 2023-06-04 21:43  晚枫zz  阅读(91)  评论(0)    收藏  举报