JAVA基础学习总结,day7(Scanner类,匿名对象,Random类, ArrayList集合)

Scanner类:

创建对象:
格式:数据类型 变量名=new 数据类型(参数列表);
举例:Scanner sc = new Scanner(System.in);
调用方法:变量名.方法名();
举例:int i = sc.nextInt(); // 接收一个键盘录入的整数

1.包:java.util 需要导包

2.查看类的解释说明:
Scanner类:一个 可以使用正则表达式来解析基本类型和字符串的简单 文本扫描器

3.查看构造方法:

  • Scanner(InputStream source) 构造一个新的 Scanner,它生成的值是从指定的输入流扫描的。
  • InputStream: 输入流
  • System.in: 代表从键盘录入

4.查看成员方法:

  • String next() 查找并返回来自此扫描器的下一个完整标记。 --> 获取一个字符串
  • int nextInt() 将输入信息的下一个标记扫描为一个 int。 —> 获取一个int类型的数据
  • String nextLine() 此扫描器执行当前行,并返回跳过的输入信息。 —>获取一行数据

5.练习:
求和:键盘录入两个数据并求和
取最值:键盘录入三个数据并获取最大值

代码

  1. 成员方法的使用
// 创建了一个文本扫描器,用来扫描键盘录入的数据
Scanner sc = new Scanner(System.in);
// 获取一行数据
// String line = sc.nextLine();
// System.out.println(line);
// 获取一个int类型的数据
int num = sc.nextInt();
System.out.println("num:"+num);
// 获取一个字符串
// String str = sc.next();
// System.out.println("str:"+str);
  1. 练习一:键盘录入两个数据并求和
// 1.创建一个文本扫描器,用来扫描键盘录入的数据
Scanner sc = new Scanner(System.in);
// 获取2个int类型的数
// 2.获取第一个数
System.out.println("请输入第一个int类型的数:");
int num1 = sc.nextInt();
// 3.获取第二个数
System.out.println("请输入第二个int类型的数:");
nt num2 = sc.nextInt();
// 4.求和
int sum = num1 + num2;
System.out.println("num1+num2="+sum);

  1. 练习二:取最值:键盘录入三个数据并获取最大值
// 1.创建一个文本扫描器,用来扫描键盘录入的数据
Scanner sc = new Scanner(System.in);
// 2.获取第一个数 System.out.println("请输入第一个数:");
int num1 = sc.nextInt();
// 3.获取第二个数 System.out.println("请输入第二个数:");
int num2 = sc.nextInt();
// 4.获取第三个数 System.out.println("请输入第三个数:");
int num3 = sc.nextInt();
// 5.找出最大值
// 先比较2个数,找出一个最大值
int max = num1 > num2 ? num1 : num2;
// 拿找出的最大值和第三个数进行比较,获取最大值
max = max > num3 ? max : num3;
System.out.println("三个数的最大值是:"+max);

匿名对象: 没有名字的对象
格式:new 类名(参数列表)
举例:new Scanner(System.in);

匿名对象的作用:

  1. 匿名对象可以作为方法的参数
  2. 匿名对象可以作为方法的返回值
  3. 弊端:匿名对象只能使用一次

当调用一个方法需要传入一个对象的时候,而该对象仅仅只是在调用该方法的时候使用,那么就可以传入一个匿名对 象 当一个方法需要返回一个对象的时候,而返回的该对象仅仅只是作为返回值返回,那么就可以返回一个匿名对象
简而言之: 当创建一个对象,该对象只需要使用一次的时候,就使用匿名对象

代码

// 测试类
public class Demo3 {
public static void main(String[] args)
{
//Scanner sc = new Scanner(System.in);
//new Scanner(System.in);
// 调用method1方法
// Person person = new Person("张三",18);
// method1(person);
// 创建person对象,就是为了作为参数传入method1方法中
// 优化
method1(new Person("张三",18));
method1(new Person("张三",18));
new Person("田七",20);
new Person("田七",20);
}
/** * 匿名对象作为方法的参数 * @param p */
public static void method1(Person p){
System.out.println(p.getName()+"...."+p.getAge());
}
/** * 匿名对象作为方法的返回值
* @return
*/
public static Person method2(){
// Person person = new Person("李四",19);
// return person;
return new Person("李四",19);
}
}
Random类:

产生随机数:
//创建随机数对象;
Random r=new Random();
//产生的随机数赋值给i
int i=r.nextInt();

  1. 查看包:java.util 导包
  2. 查看类的解释说明: Random:此类的实例用于生成伪随机数流–>用来产生随机数
  3. 查看构造方法: Random() 创建一个新的随机数生成器。 —>创建随机生成器
  4. 查看成员方法: int nextInt(int n) 返回一个伪随机数,它是取自此随机数生成器序列的、在 0(包括)和指定值(不包 括)之间均匀分布的 int 值。
    范围: [0,n)
代码

5.练习:
获取1-n之间的随机数,包含n
产生[n,m]之间的随机数—> r.nextInt(m-n+1)+n
猜数字小游戏
游戏开始时,会随机生成一个1-100之间的整数number 。
玩家猜测一个数字guessNumber ,
会与number 作比较,系统提示大了或者小了,直到玩家猜中,游戏结束。

public class Demo4 {
public static void main(String[] args) {
/*
猜数字游戏
分析:
猜多少次: 不知道 --->while循环
游戏结束: 猜中接收 -->break结束循环
*/
// 1.创建一个Random随机生成器
Random r = new Random();
// 2.随机生成一个1-100之间的整数number
int number = r.nextInt(100)+1;
System.out.println(number);
// 3.猜数字
// 3.1 创建Scanner文本扫描器对象
Scanner sc = new Scanner(System.in);
while(true){
// 3.2 获取用户猜的数字
System.out.println("请猜数字:");
int guessNumber = sc.nextInt();
// 3.3 拿用户猜的数字和随机生成的随机数进行比较
if(guessNumber == number){
System.out.println("恭喜你,猜对了");
break;
}else if(guessNumber > number){
System.out.println("猜大了");
}else{
System.out.println("猜小了");
}
}
}
private static void method03() {
//需求: 随机参数一个范围为[30,50]的随机数
// 1.创建一个随机生成器 Random对象
Random r = new Random();
// 2.调用nextInt方法随机产生一个数
// [30,50]-->[0,20]+30 --->[30,50]
int num = r.nextInt(21)+30;
System.out.println(num); }
/** * 产生指定范围的随机数 */
private static void method02() {
//需求: 随机参数一个范围为[1,50]的随机数
// 1.创建一个随机生成器 Random对象
Random r = new Random();
// 2.调用nextInt方法随机产生一个数
// [1,50] -->[0,49]+1 --->[1,50]
int num = r.nextInt(50)+1;
System.out.println(num); }
// 幸运大转盘练习
private static void method01() {
// 创建随机生成器
Random r = new Random();
// 幸运大转盘
/*
0--->谢谢参与
1--->一等奖
2--->二等奖
3--->三等奖
4--->鼓励奖
*/
// 随机产生一个随机数,范围[0,5)
int num = r.nextInt(5);
switch (num){
case 0:
System.out.println("谢谢参与");
break;
case 1:
System.out.println("一等奖");
break;
case 2:
System.out.println("二等奖");
break;
case 3:
System.out.println("三等奖");
break;
case 4:
System.out.println("鼓励奖");
break;
数组存储引用数据类型的对象
} }
/**
nextInt()方法的使用
*/
public static void method(){
// 创建随机生成器
Random r = new Random();
// 随机产生一个随机数,范围为:[0,10)
int num = r.nextInt(10);
System.out.println(num);
// 随机产生一个随机数,范围为[1,3)
// 分析: [0,2) +1 --> [1,2]
int num1 = r.nextInt(2) + 1;// --->[0,1]--->[1,2]
System.out.println(num1); }
}

数组存储引用数据类型的对象

public class Demo5 {
public static void main(String[] args) {
// 需求: 定义一个数组用来存储3个Student对象
// 1.创建3个Student对象
Student stu1 = new Student("张三丰",128);
Student stu2 = new Student("张翠山",54);
Student stu3 = new Student("张无忌",23);
// 2.创建一个数组,数组是Student数组类型
// String[] 字符串数组类型
// Student[] Student数组类型
Student[] arr = new Student[3];
//3.往arr数组中存储元素
arr[0] = stu1;
arr[1] = stu2;
arr[2] = stu3;
// 4.验证: 遍历数组中的元素
for (int i = 0;i<arr.length;i++){
System.out.println(arr[i].name);
System.out.println(arr[i].getName()+"..."+arr[i].getAge());
arr[i].show();
}
Student stu4 = new Student("赵敏",23);
// arr[3] = stu4;
// 因为3索引不存在,所以访问了不存在的索引,发生索引越界异常
// 问题:由于数组长度不变,所以不能动态往数组中添加新的元素,也就是说数组一旦创建了,只能存固定个数的元素
// 解决: 希望有一个容器,可以存储不固定个数的数据,想添加就添加,想删除就删除
// 集合也是一个容器,该容器可以存储不固定个数的数据
// 集合--->ArrayList } }
public class Student {
String name; private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name; this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
/** * 显示信息 */
public void show(){
System.out.println(name+"..."+age);
} }
ArrayList集合

//创建ArrayLists集合类对象
格式:ArrayList list = new ArrayList();
简化格式:ArraListlist=new ArrayList<>();

集合: ArrayList是集合中的其中一种集合

ArrayList:

1.包:java.util 导包

2.查看类的解释说明
ArrayList:本质其实就是一个可变数组
ArrayList: 代表泛型,其实就是一种未知的类型,在使用的时候确定该泛型表示的具体类型
ArrayList中的泛型其实是用来限制集合中存储的元素的类型,也就是说使用ArrayList的时候<>里面写什么数 据类型,
该集合就只能存储什么数据类型的数据.

特点:

  1. ArrayList集合的长度是不固定的,是可变的
  2. ArrayList集合的泛型只能写引用数据类型,不能写基本数据类型
  3. ArrayList集合有索引,索引是从0开始,最大索引是 元素个数-1 —>对象名.size()-1

3.查看构造方法:
ArrayList() 构造一个初始容量为 10 的空列表。

4.查看成员方法:

  • public boolean add(E e):将指定的元素添加到此集合的尾部。
  • public E remove(int index) :移除此集合中指定位置上的元素。返回被删除的元素。 boolean remove(Object o) 移除此列表中首次出现的指定元素(如果存在)。
  • public E get(int index) :返回此集合中指定位置上的元素。返回获取的元素。
  • public int size() :返回此集合中的元素数。遍历集合时,可以控制索引范围,防止越界。
    boolean contains(Object o) 如果此列表中包含指定的元素,则返回 true,否则返回false

5.集合如何存储基本数据类型
ArrayList对象不能存储基本类型,只能存储引用类型的数据。类似不能写,但是存储基本数据类型对应的 包装类型是可以的。
所以,想要存储基本类型数据,<>中的数据类型,必须转换后才能编写
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
自动装箱:基本数据类型可以自动包装为包装类类型
自动拆箱:包装类类型可以自动拆箱为基本数据类型

代码

/** * 构造方法的使用 */
private static void method01() {
// 创建了一个ArrayList集合对象,该集合对象能存储任意引用数据类型的数据
ArrayList list1 = new ArrayList();
// 创建了一个ArrayList集合对象,该集合对象只能存储String类型的数据
ArrayList<String> list2 = new ArrayList<String>();
// 省略格式:
ArrayList<String> list3 = new ArrayList<>();// 推荐 常用
ArrayList<String> list4 = new ArrayList();// 不推荐 }

private static void method02() {
// 创建了一个ArrayList集合对象,该集合对象只能存储String类型的数据
ArrayList<String> list2 = new ArrayList<String>();
// 调用add方法往集合中添加元素
list2.add("jack");
list2.add("rose");
System.out.println(list2);// [jack, rose]
// 创建了一个ArrayList集合对象,该集合对象能存储任意引用数据类型的数据
ArrayList list1 = new ArrayList();
Student stu1 = new Student("班长",30);
// 调用add方法往集合中添加元素
list1.add(stu1); // 往list1集合中存储学生对象
list1.add("lily");// 往list1集合中存储字符串对象
System.out.println(list1);
// list2.add(stu1); 报错,因为list2的泛型是String,所以该集合只能存储字符串
}

1.删除集合中的元素

private static void method03() {
// 创建一个ArrayList集合
ArrayList<String> list = new ArrayList<>();
// 往集合中存储元素
list.add("jack");
list.add("rose");
list.add("lily");
list.add("lucy");
list.add("jack");
System.out.println("删除之前的集合是:"+list);// [jack, rose, lily, lucy,jack]
// 删除元素
boolean flag = list.remove("jack");
System.out.println(flag);// true
System.out.println("删除之后的集合是:"+list);// [rose, lily, lucy,jack]
// 删除元素
/*String remove = list.remove(1);
System.out.println(remove);// rose
System.out.println("删除之后的集合是:"+list);// [jack, lily, lucy]*/
}

2.获取元素和计算集合中元素个数,以及断集合中是否包含指定元素

private static void method04() {
// 创建一个ArrayList集合
ArrayList<String> list = new ArrayList<>();
// 往集合中存储元素
list.add("jack");
list.add("rose");
list.add("lily");
list.add("lucy");
list.add("jack");
// 获取索引为 3的元素
String e = list.get(3);
System.out.println(e);// lucy
// 获取集合中元素的个数
int size = list.size();
System.out.println(size);//5
// 判断集合中是否包含lily
boolean flag = list.contains("lily");
System.out.println(flag);// true
}

3.遍历集合

private static void method05() {
// 创建一个ArrayList集合
ArrayList<String> list = new ArrayList<>();
// 往集合中存储元素
list.add("jack");
list.add("rose");
list.add("lily");
list.add("lucy");
list.add("jack");
// 遍历
// 起始索引: 0 最大索引 list.size()-1
for (int i = 0;i<list.size();i++){
System.out.println(list.get(i));
}
}

4.如何存储基本数据类型

private static void method06() {
// 需求:往ArrayList集合中存储基本数据类型???
ArrayList<Integer> list = new ArrayList<>();
// 往list集合中存储数据
list.add(10);
list.add(20);
list.add(30);
System.out.println(list);
/* int num = 10;
// 左边是引用数据类型,右边是基本数据类型
Integer i = num;
// 引用数据类型转换为基本数据类型
// 左边是基本数据类型,右边是基本数据类型引用数据类型
int res = i;*/
}

5.练习一:生成6个1~33之间的随机整数,添加到集合,并遍厉

private static void method07() {
// 生成6个1~33之间的随机整数,添加到集合,并遍历
// 创建一个ArrayList集合
ArrayList<Integer> list = new ArrayList<>();
// 创建一个随机生成器
Random r = new Random();
// 循环产生6个随机数,范围是[1,33]
for (int i = 0; i < 6; i++) {
int num = r.nextInt(33)+1;
// 把随机数添加到集合中
list.add(num); }
// 遍历集合
for (int i = 0;i<list.size();i++){

System.out.println(list.get(i));
}
}

6.练习二:自定义4个学生对象,添加到集合,并遍历

private static void method08() {
// 自定义4个学生对象,添加到集合,并遍历
// 创建4个学生对象
Student stu1 = new Student("张三丰",111);
Student stu2 = new Student("张翠山",54);
Student stu3 = new Student("张无忌",11);
Student stu4 = new Student("张三",10);
// 创建一个ArrayList集合,用来存储学生对象
ArrayList<Student> list = new ArrayList<>();
// 添加元素
list.add(stu1);
list.add(stu2);
list.add(stu3);
list.add(stu4);
// 遍历
for (int i = 0;i<list.size();i++){
System.out.println(list.get(i).getName()+"..."+list.get(i).getAge());
}
}

7.练习三:打印集合方法

private static void method09() {
/*
打印集合方法
定义以指定格式打印集合的方法(ArrayList类型作为参数),
使用{}扩起集合,使用@分隔每个元素。格式参照 {元素@元素@元素}。
*/
// 创建一个ArrayList集合
ArrayList<String> list = new ArrayList<>();
// 往集合中存储元素
list.add("jack");
list.add("rose");
list.add("lily");
list.add("lucy");
list.add("jack");
// 遍历打印
System.out.print("{");
for (int i = 0;i<list.size();i++){
if(i == list.size()-1){
System.out.print(list.get(i)+"}");
}else{
System.out.print(list.get(i)+"@");
}
}
}

8.练习四:定义获取所有偶数元素集合的方法(ArrayList类型作为返回值)

public static void main(String[] args) {
/* 获取集合方法
定义获取所有偶数元素集合的方法(ArrayList类型作为返回值)
*/
ArrayList<Integer> list1 = new ArrayList<>();
list1.add(10);
list1.add(2);
list1.add(1);
list1.add(3);
list1.add(6);
// 获取偶数集合
ArrayList<Integer> list = getArrayList(list1);
System.out.println(list);//[10,2,6]
}
/**
* 引用数据类型作为方法的参数,传递的是地址值
* 引用数据类型作为方法的返回值,返回的是地址值
* @param list
* @return
*/
public static ArrayList<Integer> getArrayList(ArrayList<Integer> list){
// 1.创建一个集合,用来存储所有的偶数
ArrayList<Integer> list1 = new ArrayList<>();
// 2.循环遍历传入的集合,获取每一个元素
for (int i = 0;i<list.size();i++){
// 获取元素
Integer e = list.get(i);
// 判断该元素是否是偶数
if(e % 2 == 0){
// 说明是偶数,是偶数就添加到集合中
list1.add(e);
}
}
// 3.返回偶数集合
return list1;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值