Scanner类、Random类、ArrayList集合的基本使用

1.Scanner类


了解API的使用方式,我们通过Scanner类,熟悉一下查询API,并使用类的步骤。

1.1什么是Scanner类


一个人可以解析基本类型和字符串的简单文本扫描器。例如,如以下代码使用户能够从System.in中读取一个数:

Scanner sc = new Scanner(System.in)
int i = sc.nextInt();

注意:System.in系统输入指的是通过键盘录入数据。

1.2引用数据类型使用步骤


导包

使用import关键字导包,在类的所有代码之前导包,引入要使用的类型,java.lang包下的所有类无需导入。

格式:

import 包名.类名;

举例:

​java.util.Scanner;

1.3创建对象


使用该类的构造方法,创建一个该类的对象。

格式:

数据类型 变量名 = new 数据类型(参数列表);

举例:

Scanner sc = new Scanner(System.in);

1.4使用

对象名.成员方法名();
获取键盘输入的一个int数字:int num=sc.nextInt();
获取键盘输入的一个字符串:String str=sc.nextInt();

举例:

import java.util.Scanner;//1.导包

public class TestScanner {
    public static void main(String[] args) {
        //2.创建
        //备注:System.in代表从键盘进行输入
        Scanner sc=new Scanner(System.in);
        //3.获取键盘输入的int数字
        int num = sc.nextInt();
        System.out.println("输入的int数字是:" + num);
        //4.获取键盘输入的字符串
        String str=sc.next();
        System.out.println("输入的字符串是:" + str);
    }
}

练习

题目1:

键盘输入两个int数字,并且求出和值。

思路:

1.既然需要键盘输入,那么就用Scanner。
2.Scanner的三个步骤:导包、创建、使用。
3.需要的是两个数字,所以要调用两次nextInt方法。
4.得到了两个数字,就需要加在一起。
5.将结果打印输出。
import java.util.Scanner;

public class TestScanner2 {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入第一个数字:");
        int i = scanner.nextInt();
        System.out.println("请输入第二个数字:");
        int n = scanner.nextInt();

        int result=i+n;
        System.out.println("结果是:" + result);
    }
}

运行的结果是:

请输入第一个数字:
1
请输入第二个数字:
5
结果是:6

Process finished with exit code 0

题目2:

键盘输入三个int数字,然后求出其中的 最大值。

思路:

1.既然是键盘输入,肯定需要用到Scanner
2.Scanner三个步骤:导包、创建、使用nextInt()方法
3.既然三个数字,那么调用三次nextInt()方法,得到三个int变量
4.无法同时判断三个数字谁最大,应该转换为两个步骤:
     4.1首先判断前两个当中谁最大,拿到前两个的最大值
     4.2拿着前两个中的最大值,再和三个数字比较,得到三个数字当中的最大值
5.打印最终结果
import java.util.Scanner;

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

        System.out.println("请输入第一个数字:");
        int i = scanner.nextInt();
        System.out.println("请输入第二个数字:");
        int n = scanner.nextInt();
        System.out.println("请输入第三个数字:");
        int z = scanner.nextInt();

        //首先得到前两个数字当中的最大值
        int temp = i > n ? i : n;
        int max = temp > z ? temp : z;
        System.out.println("最大值是:" + max);
    }
}

运行的结果是:

请输入第一个数字:
5
请输入第二个数字:
8
请输入第三个数字:
1
最大值是:8

Process finished with exit code 0

2.Random基本使用


2.1 random类 : 用于生成随机数字

2.2 使用的三个步骤

导包【import java.util.Random;】
创建【Random r=new Random();//小括号中留空即可】
使用:获取一个随机的int数字(范围是int所有范围,有正负两种):int num=r.nextInt()

2.3练习:

题目1:

根据int变量n的值,来获取随机数字,范围是[1,n],可以取到1也可以取到n.

思路:
1.定义一个int变量n,随意赋值
2.要使用Random:三个步骤,导包、创建、使用
3.如果写10,那么就是0-9,然而想要的是1-10,可以发现:整体+1即可。
4.打印随机数字
import java.util.Random;

public class TestRandom {
    public static void main(String[] args) {
        int n = 5;
        Random r = new Random();

        for (int i = 0; i < 100; i++) {
            //本来范围是[0,n],整体n+1之后变成了[1,n+1],也就是[1,n]
            int result = r.nextInt(n) + 1;
            System.out.println(result);
        }
    }
}

题目2:

用代码模拟猜数字的小游戏。

思路:

1.首先需要产生一个随机数字,并且一旦产生不再变化。用Random的nextInt方法
2.需要键盘输入,所以用到了Scanner
3.获取键盘输入的数字,用Scanner当中的nextInt方法
4.已经得到了两个数字,判断(if)一下:
    如果太大了,提示太大,并且重试;
    如果太小了,提示太小,并且重试;
    如果猜中了,游戏结束。
5.重试就是再来一次,循环次数不确定,用while(true)

​
public static void main(String[] args) {
        //使用Scanner 和 Random完成一个猜数字小游戏,猜1-100之间的数字
        Scanner scanner=new Scanner(System.in);
        //1.产生一个1-100之间的随机数
        Random random=new Random();
        int num = random.nextInt(100) + 1;//随机100个数字0-99,然后+1 就是1-100
        //定义一个用来统计用户才对用了多少次
        int cout=0;
        //2.不断地执行循环,让用户输入要猜的数字并进行大小提示
        do {
            System.out.println("输入猜的数字");
            int input = scanner.nextInt();
            if (input>num){
                System.out.println("猜大了");
            }else if (input<num){
                System.out.println("猜小了");
            }else {
                System.out.println("恭喜你,猜对了!");
                break;
            }
            cout++;
        }while (true);
        //3.结束循环用户猜对,打印输出
        System.out.println("你猜对了数字"+num+"用了"+cout+"次");
    }
 
​

运行的结果是:

输入猜的数字
50
猜小了
输入猜的数字

70
猜大了
输入猜的数字
60
猜大了
输入猜的数字

55
猜小了
输入猜的数字
58
猜大了
输入猜的数字
57
猜大了
输入猜的数字
56
恭喜你,猜对了!
你猜对了数字56用了6次

Process finished with exit code 0

3.ArrayList集合


  1. 数组的长度不可以发生改变,但ArrrayList集合的长度是可以随意变化的
  2. 对于ArrayList来说有一个尖括号<E>代表泛型...泛型也就是装在集合当中所有的元素,都是统一的什么类型

注意:泛型只能是引用类型,不能是基本类型(byte int short long float double boolean char)

3.1创建

//表示创建了一个ArrayList集合,集合的名称是List,立里面装的全都是String字符串类型的数据
ArrayList<String> list=new ArrayList<>( );

3.2注意事项:

  1. 对于ArrayList集合来说,直接打印得到的不是地址值而是内容
  2. 如果内容为空得到的是空的中括号[ ]
  3. 向集合中添加一些数据用add方法;【list.add("添加")】然后可以打印输出”添加“   System.out.println(list);

3.3ArrayList常用方法有:

对于元素的操作,基本体现在——增、删、查。常用的方法有:

  • public boolean add(E e) :将指定的元素添加到此集合的尾部。(备注:对于ArrayList集合来说,add添加动作一定是成功的,所以返回值可用可不用,但是对于其他集合,add添加动作不一定成功) 
  • public E remove(int index) :移除此集合中指定位置上的元素。返回被删除的元素
  • public E get(int index) :返回此集合中指定位置上的元素。返回获取的元素。
  • public int size() :返回此集合中的元素数。遍历集合时,可以控制索引范围,防止越界。

遍历可用for循环。

3.4 存储基本数据类型

基本类型 基本类型包装类
byteByte
shortShort
int   Integer
long Long
floatFloat
doubleDouble
char Character
booleanBoolean

3.5

题目:

用代码写出随机不重复点名

public static class ArrayListTest{
        public static void main(String[] args){
            //可以使用Arrays的asList实现序列化一个集合
            List<String> list= Arrays.asList("张三","李四","王二","麻子","光头强");
            //把list作为参数重新构建一个新的ArrayList集合
            ArrayList<String> names=new ArrayList<>(list);

            //使用Scanner、Random、ArrquList完成一个不重复的点名程序
            Random random=new Random();
            Scanner scanner=new Scanner(System.in);
            while (true){
                //如果集合中没有元了,则结束循环
                if(names.size()==0){
                    System.out.println("已完成所有学生抽查,抽查结束请重新开始!");
                    break;
                }
                System.out.println("确认点名请输入Y/y");
                String input = scanner.next();
                if (input.equals("Y")|| input.equals("y")){
                    //随机一个集合的下标
                    int index = random.nextInt(names.size());
                    System.out.println("本次抽到: "+names.get(index));
                    //该学生已被抽到,把他从集合中移除
                    names.remove(index);
                }else {
                    System.out.println("本次抽查结束!");
                    break;
                }
            }

        }
    }

 运行的结果是:学生抽查完成,则结束抽查,请重新开始!

确认点名请输入Y/y
y
本次抽到: 王二
确认点名请输入Y/y
y
本次抽到: 李四
确认点名请输入Y/y
y
本次抽到: 光头强
确认点名请输入Y/y
y
本次抽到: 张三
确认点名请输入Y/y
y
本次抽到: 麻子
已完成所有学生抽查,抽查结束请重新开始!

Process finished with exit code 0

如果写其他的字母则抽查结束!

确认点名请输入Y/y
y
本次抽到: 李四
确认点名请输入Y/y
y
本次抽到: 张三
确认点名请输入Y/y
n
本次抽查结束!

Process finished with exit code 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值