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集合
- 数组的长度不可以发生改变,但ArrrayList集合的长度是可以随意变化的
- 对于ArrayList来说有一个尖括号<E>代表泛型...泛型也就是装在集合当中所有的元素,都是统一的什么类型
注意:泛型只能是引用类型,不能是基本类型(byte int short long float double boolean char)
3.1创建
//表示创建了一个ArrayList集合,集合的名称是List,立里面装的全都是String字符串类型的数据
ArrayList<String> list=new ArrayList<>( );
3.2注意事项:
- 对于ArrayList集合来说,直接打印得到的不是地址值而是内容
- 如果内容为空得到的是空的中括号[ ]
- 向集合中添加一些数据用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 存储基本数据类型
基本类型 | 基本类型包装类 |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
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