Java基础01 基础语法
文章目录
- 01 Java概述
- 1、JAVA安装
- 2、HelloWorld
- 3、JAVA概述
- 3.1 JAVA的发展
- 3.2JAVA可以做什么
- 3.2.1 JAVA SE
- 3.2.2 JAVA ME
- 3.2.3 JAVA EE
- 3.2.4 总结
- 4、JAVA跨平台的原理
- 5、JDK与JRE
- 5.1 JDK
- 5.2 JRE
- 5.3 Other
- 02 基础语法
- 1、注释
- 2、关键字
- 3、字面量
- 4、变量
- 5、计算机中的数据存储
- 5.1 进制
- 5.2 计算机为什么用二进制
- 5.3 进制转换
- 5.3.1 任意进制转十进制
- 5.3.2 十进制转其他进制
- 5.4 计算机的存储规则
- 5.4.1 文字:数字、英文、汉字
- 5.4.2 图片
- 5.4.3 声音
- 6、数据类型
- 7、标识符
- 8、键盘录入
- 9、关于IDEA
- 9.1 安装
- 9.2 IDEA项目结构介绍
- 10、运算符
- 10.1 算数运算符
- 10.1.1 隐式转换和强制转换
- 10.1.1.1 隐式转换
- 10.1.1.2 强制转换
- 10.1.2 字符串和字符的加操作
- 10.2 自增自减运算符
- 10.2.1 单独使用时
- 10.2.2 参与计算时
- 10.3 赋值运算符
- 10.4 关系运算符
- 10.5 四种逻辑运算符 与 短路逻辑运算符
- 10.5.1 四种逻辑运算符号
- 10.5.2 短路逻辑运算符号
- 10.6 三元运算符号
- 10.7 运算符优先级
- 10.8 其他运算符
- 11、原码、反码、补码
- 11.1 原码
- 11.2 反码
- 11.3 补码
- 12、流程控制语句
- 12.1 顺序结构
- 12.2 分支结构
- 12.2.1 if
- 12.2.2 switch
- 12.3 循环结构
- 13、数组
- 13.1 数组的概述及静态初始化
- 13.2 数组的地址值和元素访问
- 13.3 数组遍历
- 13.3.1 基于for循环遍历
- 13.3.2 基于for each遍历
- 12.3.3 基于Arrays.toString()
- 13.4 数组动态初始化
- 13.5 数组常见问题
- 13.6 数组的内存图
- 13.6.1 Java的内存分配
- 13.6.2 数组的内存图
- 13.6.3 两个数组指向同一个空间的内存图
- 13.7 二维数组
- 14、方法
- 14.1 方法的格式
- 14.1.1 最简单的方法定义与调用
- 14.1.2 带参数的方法定义和调用
- 14.1.3 带返回值的方法的定义和调用
- 14.1.4 小结
- 14.2 方法的重载
- 14.3 方法的内存
- 14.3.1 方法调用的基本内存原理
- 14.3.2 方法传递基本数据类型、引用数据类型的内存原理
- 14.4 方法中值传递时的内存
- 15、综合练习
- 15.1 卖飞机
- 15.2 找质数
- 15.3 开发验证码
- 15.4 数组元素的复制
- 15.5 评委打分
- 03 字符串
- 1、String
- 1.1 API
- 1.2 String概述
- 1.3 创建String对象的两种方式
- 1.4 创建String对象时的内存变化
- 1.5 字符串的比较
- 1.5.1 情况一
- 1.5.2 情况二
- 1.6 小练习
- 1.6.1 用户登录
- 1.6.2 遍历字符串、统计字符次数、字符串拼接和反转
- 1.6.3 金额转换
- 1.6.4 手机号屏蔽
- 1.6.5 敏感词替换
- 1.6.6 身份证信息查看
- 2、StringBuilder
- 2.1 概述
- 2.2 链式编程
- 2.3 练习
- 3、StringJoiner
- 3.1 概述
- 3.2 示例代码
- 4、字符串原理
- 4.1 字符串拼接的底层原理
- 4.1.1 等号右边没有变量
- 4.1.2 等号右边有变量
- 4.1.3 JDK8字符串拼接的底层原理
- 4.2 StringBuilder提高效率的原理图
- 4.3 StringBuilder源码分析
- 5、综合练习
- 04 集合
- 1、集合和数组的对比
- 2、集合的基本使用
- 3、集合练习
视频链接:Java入门-01-Java学习介绍
阿玮老师讲的是真的详细!!!
01 Java概述
1、JAVA安装
(此部分不做详细介绍)三步走:
- 下载
- 安装
- 环境变量
1、下载
官网:Java Downloads | Oracle
2、安装
下载好exe文件,直接安装,无脑点击下一步即可。
之后验证是否安装成功,打开cmd,输入java -version进行测试
3、配置环境变量
- 新建JAVA_HOME变量:用于说明JDK的安装目录
- 修改系统环境变量Path,追加%JAVA_HOME%\bin
备注:如果不行的话,可以考虑直接用绝对路径
知识补充:
- 了解JDK的安装目录
2、HelloWorld
javac:编译。javac是JDK提供的编译工具
java:运行。java是JDK提供的工具
public class HelloWorld {public static void main(String[] args) {System.out.println("Hello World!");}
}
3、JAVA概述
3.1 JAVA的发展
java版本更新比较快,其版本分为两种:
- 过度版本
- LST:长期支持版本,如JAVA8和JAVA11
3.2JAVA可以做什么
JAVA三大使用平台(JAVA的三大类)
- JAVA SE
- JAVA ME
- JAVA EE
3.2.1 JAVA SE
3.2.2 JAVA ME
JAVA ME 已经没落了,但华为鸿蒙系统等还是可以用JAVA开发。
3.2.3 JAVA EE
服务器开发,JAVA就是天。
3.2.4 总结
4、JAVA跨平台的原理
5、JDK与JRE
5.1 JDK
JDK(Java Development kit,java开发工具包)由一下几部分构成
- JVM:Java虚拟机,真正运行Java程序的地方
- 核心类库
- 开发工具
5.2 JRE
JRE是Java运行环境。
当我们已经写完代码编译好了,需要传给别人时,我们并不需要完整的JDK。
5.3 Other
临时拓展:06 Python面向对象与JAVA面向对象
说到面向对象(OOP:Object Oriented Programming)就要先说面向过程(Procedure-Oriented Programming)
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
面向对象是把整个需求按照特点、功能划分,将这些存在共性的部分封装成对象,创建对象不是为了完成某一个步骤,而是描述某个事物在解决问题的步骤中的行为。
编程的思想是非常重要的,编程只是一个工具。
02 基础语法
大纲:
- JAVA入门
- 小概念
- Idea和运算符
- 判断和循环
- 方法
- 数组
- 斯坦福大学练习题
1、注释
注释内容不参与编译和运行
2、关键字
关键字:被Java赋予了特殊涵义的单词
总结:
3、字面量
4、变量
小练习:
题意:公交车问题,每一站会上下乘客,用变量去计算,并输出最后在终点站剩余的乘客
public class BusProblem{public static void main(String[] args){int count = 0;count = count + 1;System.out.println(count);count = count + 2 - 1;count = count + 1;System.out.println(count);}
}
输出展示:
1
3
5、计算机中的数据存储
本节通过了解文字、图片、声音在计算机中的存储形式,进而学习计算机中的数据存储
5.1 进制
示例代码:
public class PrintSystem{public static void main(String[] args){System.out.println(0b101);System.out.println(17);System.out.println(0761);System.out.println(0xabc);}
}
输出展示:
5
17
497
2748
补充:Java中print 和 println区别
区别是:print()
输出完毕后不换行,而println()
输出完毕后会换行,因此println()
不输出任何东西时,就输出一个换行符。
5.2 计算机为什么用二进制
以前计算机采用打孔的形式(左图),只有有孔和无孔两个状态。这个形式现在依旧存在,当前常用的5V电路板中,我们将大于3.3V定义为1,小于3.3V定义为0。
5.3 进制转换
5.3.1 任意进制转十进制
任意进制转十进制公式:系数 * 基础的权次幂,相加
二进制转十进制有个快速转换法:8421快速转换法
- 每一位二进制的1都代表一个固定值,那把每一位的1代表的十进制数加起来即可,示例如下:
5.3.2 十进制转其他进制
5.4 计算机的存储规则
计算机中,任何数据都是以二进制的形式存储的
5.4.1 文字:数字、英文、汉字
一、一个数字是怎么存储的?
以二进制的形式在计算机中存储。
二、那英文或者字符怎么存储呢?
三、那汉字怎么存储呢?
Unicode编码,万国码
5.4.2 图片
常见的三类图片:黑白图、灰度图、彩色图。
这里直接说彩色图了,如1080p的分辨率就是1920×1080,也就是显示1920×1080个像素点,而每个像素点可以基于光学三原色,也就是RGB值表示,R、G、B三个数值对应0~255的其中一个整数,进而我们可以用数字表示图片。
5.4.3 声音
声音数据可以用波形图表示,进而用数据表示
6、数据类型
JAVA语言的数据类型分为:基本数据类型、引用数据类型。本节我们只讲述前者。
基本数据类型:四类八种
定义bool类型数据时,用关键词boolean
注意事项:
1、long
定义long类型时需注意:
不加的话,终端会报错。
2、float与double
float需要加后缀,double不用
小结:
练习:输出老师信息
public class TeacherIntroduce{public static void main(String[] args){String name = "黑马程序员";System.out.println(name);int age = 18;System.out.println(age);char sex = '男';System.out.println(sex);double height = 180.1;System.out.println(height);boolean single = true;System.out.println(single);}
}
错误: 编码GBK的不可映射字符
javac 默认按照本机语言(GBK) 编译代码,而我们的代码是 utf-8 编码,所以会报错
这里提供三种解决方法:
- 方法一:运行是指定编码格式
javac -encoding UTF-8 xxx.java
- 方法二:更改java源文件编码格式
- 方法三:删除中文
7、标识符
标识符:就是给类、方法、变量等起的名字
8、键盘录入
示例代码:
// 1、导包
import java.util.Scanner;public class ScannerDemo{public static void main(String[] args){// 2、创建对象,表示我们准备要用Scanner这个类Scanner port = new Scanner(System.in);System.out.print("请输入数字:");// 3、接收数据int i = port.nextInt();System.out.println(i);}
}
后续编程时需注意:我们定义的变量是int型,此时只能输入数字,其他的会报错
请输入数字:afsf
Exception in thread "main" java.util.InputMismatchExceptionat java.util.Scanner.throwFor(Unknown Source)at java.util.Scanner.next(Unknown Source)at java.util.Scanner.nextInt(Unknown Source)at java.util.Scanner.nextInt(Unknown Source)at ScannerDemo.main(ScannerDemo.java:10)
补充:
9、关于IDEA
9.1 安装
官网链接:https://www.jetbrains.com/idea/download/
视频教程:Java基础概念-12-idea的概述和下载安装
9.2 IDEA项目结构介绍
- project:项目
- module:模块
- package:包
- class:类
IDEA用法:Java基础概念-13-idea中的第一个代码
示例代码:
package day1.code;public class Hello {public static void main(String[] args){System.out.println("HelloWorld");}
}
10、运算符
什么是运算符?什么是表达式?
运算符种类:
- 算数运算符
- 自增自减运算符
- 赋值运算符
- 关系运算符
- 逻辑运算符
- 三元运算符
- 运算符优先级
10.1 算数运算符
- /
- 注意,想得到小数,必须有浮点数参与运算
- System.out.println(10 / 3); // 3
- System.out.println(10.0 / 3); // 3.3333333333333335
- System.out.println(10.0 / 3.0); // 3.3333333333333335
- % 取余、取模
10.1.1 隐式转换和强制转换
数字进行运算时,数据类型不一样是不能运算的
类型转换分类
- 隐式转换(自动类型提升):取值范围小 --> 取值范围大
- 强制转换:取值范围大 --> 取值范围小
10.1.1.1 隐式转换
示例代码:
public class ArithmeticOperator01 {public static void main(String[] args) {int a = 10;double b = 10.1;double c = a + b;System.out.println(a + b); // 20.1System.out.println(c); // 20.1}
}
小练习:
小结:
10.1.1.2 强制转换
注意,超过范围结果会错误:
- 程序不报错,但结果是错误的
int d = 300;
byte e = (byte) d;
System.out.println(e); // 44
小练习:
注意,细节决定成败:
byte a1 = 10;byte a2 = 20;byte result1 = (byte) (a1 + a2); // 错误写法:byte result3 = (byte) a1 + (byte) a2;System.out.println(result1); // 30byte b1 = 100;byte b2 = 100;byte result2 = (byte) (b1 + b2); System.out.println(result2); // -56 超出范围,结果错误
10.1.2 字符串和字符的加操作
一、字符串的加操作
小练习:
二、字符 + 数字
示例代码:
System.out.println(1 + 'a'); // 98
10.2 自增自减运算符
- ++
10.2.1 单独使用时
无论放变量前面还是后面,结果一样,示例代码如下:
// 单独使用时,无论放变量前面还是后面,结果一样int temp = 10;temp++;System.out.println(temp); // 11++temp;System.out.println(temp); // 12// 不是单独使用时int temp2 = 10;System.out.println(temp2++); // 10System.out.println(++temp2); // 12
10.2.2 参与计算时
这里一定要小心,多观察下面的示例代码及结果,示例代码如下:
int t1 = 100;
int t2 = t1++;
System.out.println(t2); // 100
System.out.println(t1); // 101 注意t1自身也发生了变化int t3 = 100;
int t4 = ++t3;
System.out.println(t4); // 101
System.out.println(t3); // 101
10.3 赋值运算符
注意:
10.4 关系运算符
练习
输入两个整数(范围为1~10),分别代表1号和2号两个人的时髦程度,若1号大于2号则输出true,反之输出false。
import java.util.Scanner;public class ArithmeticOperator02 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入1号的时髦度: ");int fashion1 = sc.nextInt();System.out.println("请输入2号的时髦度: ");int fashion2 = sc.nextInt();boolean result = fashion1 > fashion2;System.out.println(result);}
}
示例结果:
请输入1号的时髦度:
4
请输入2号的时髦度:
3
true
10.5 四种逻辑运算符 与 短路逻辑运算符
10.5.1 四种逻辑运算符号
10.5.2 短路逻辑运算符号
应用:
- 典型应用场景如我们登录QQ时,账号和密码均输入正确才能登录
- 我们需要做两个判断,但如果账号已经错了,就不需要再去验证密码是否正确了
- 这时候就可以用短路逻辑运算符。
10.6 三元运算符号
作用:可以进行判断,根据判断的结果得到不同的内容。
练习
利用三元运算符比较两个整数,相同则输出”相同“,不同则输出”不同“
import java.util.Scanner;public class ArithmeticOperator03 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int num1 = sc.nextInt();int num2 = sc.nextInt();System.out.println(num1 == num2 ? "相同" : "不同");}
}
10.7 运算符优先级
比较多,关键点:小括号优先所有。
10.8 其他运算符
例子:
11、原码、反码、补码
视频教程:运算符-12-多学一招原码反码补码
- 原码:十进制数据的二进制表现形式,最左边是符号位,0为正,1为负
- 反码:正数的补码和反码是其本身,负数的反码是符号位保持不变,其余位置取反
- 补码:正数的补码和反码是其本身,负数的补码是其在反码的基础上+1
11.1 原码
原码:十进制数据的二进制表现形式,最左边是符号位,0为正,1为负
P: 为什么是8位数呢?
A:计算机中一个0或者一个1为一个比特位(bit),但一个bit表示的数太小了,所以我们将8个bit分成一组,称为一个字节(byte)。
这一点可能会有点晕,且看下文。
11.2 反码
下图中,-4 -1 = -5,如果你用原码,就回变成-3,与预期结果相反,如果用反码就没问题。
总结:
11.3 补码
12、流程控制语句
- 循序结构
- 分支结构
- 循环结构
12.1 顺序结构
12.2 分支结构
12.2.1 if
if的三种格式:
12.2.2 switch
示例:
public class Main {public static void main(String[] args) {int option = 1;switch (option) {case 1:System.out.println("Selected 1");break;case 2:System.out.println("Selected 2");break;case 3:System.out.println("Selected 3");break;}}
}
switch
语句还可以匹配字符串。字符串匹配时,是比较“内容相等”。例如:
public class Main {public static void main(String[] args) {String fruit = "apple";switch (fruit) {case "apple":System.out.println("Selected apple");break;case "pear":System.out.println("Selected pear");break;case "mango":System.out.println("Selected mango");break;default:System.out.println("No fruit selected");break;}}
}
switch其他知识点:
- default的位置和省略
- case穿透
- switch新特性
- switch和if第三种格式各自的使用场景
一、default的位置和省略
二、case穿透
三、switch新特性
特性一:JDK12及之后,switch可以简化写法,不用写那么多break了
特性二:switch的结果可以赋值给变量。此特性暂不详述。
12.3 循环结构
分类:
- for
- while
- do…while
其他:
- 无限循环
- 跳转控制语句
13、数组
- 数组介绍
- 数组的定义与静态初始化
- 数组元素访问
- 数组遍历
- 数组动态初始化
- 数组内存图
- 数组常见问题
- 数组常见操作
13.1 数组的概述及静态初始化
什么是数组?
数组的定义:
- 格式一:数据类型[] 数组名 ,例如:int[] array
- 格式二:数据类型 数组名[] ,例如:int array[]
静态初始化:
13.2 数组的地址值和元素访问
地址值:
元素访问:利用索引对数组中的元素进行访问
13.3 数组遍历
三种方式:
- 遍历数组可以使用
for
循环,for
循环可以访问数组索引 for each
循环直接迭代每个数组元素,但无法获取索引;- 使用
Arrays.toString()
可以快速获取数组内容。
13.3.1 基于for循环遍历
通过for
循环就可以遍历数组。因为数组的每个元素都可以通过索引来访问。
public class Main {public static void main(String[] args) {int[] ns = { 1, 4, 9, 16, 25 };for (int i=0; i<ns.length; i++) {int n = ns[i];System.out.println(n);}}
}
13.3.2 基于for each遍历
第二种方式是使用for each
循环,直接迭代数组的每个元素:
public class Main {public static void main(String[] args) {int[] ns = { 1, 4, 9, 16, 25 };for (int n : ns) {System.out.println(n);}}
}
12.3.3 基于Arrays.toString()
Java标准库提供了Arrays.toString()
,可以快速打印数组内容:
import java.util.Arrays;public class Main {public static void main(String[] args) {int[] ns = { 1, 1, 2, 3, 5, 8 };System.out.println(Arrays.toString(ns));}
}
13.4 数组动态初始化
动态初始化:初始化时只指定数组长度,由系统为数组分配初始值
- 格式:数据类型[] 数组名 = new 数据类型[数组长度]
- 范例: int[] arr = new int[5]
13.5 数组常见问题
索引越界异常
- 原因:访问了不存在的索引
数组小练习:
一、求一个数组中的最大值并打印
示例代码:
public class ArrayExercise {public static void main(String[] args) {// int[] arr = new int[5]int[] arr = {14, 32, 12, 9, 15};int temp = arr[0];for(int a:arr){if(temp < a){temp = a;}}System.out.println("The maximum value in the array is : ");System.out.println(temp);}
}
13.6 数组的内存图
13.6.1 Java的内存分配
我们主要了解栈和堆两个概念:
13.6.2 数组的内存图
注意:arr2虽然没使用new关键字,但本质上是使用了的,他依旧会在堆内存中开辟空间
13.6.3 两个数组指向同一个空间的内存图
13.7 二维数组
14、方法
- 什么是方法?
- 方法的格式
- 方法的重载
- 方法的内存
方法(method)是程序中最小的执行单元
14.1 方法的格式
- 最简单的方法定义与调用
- 带参数的方法定义和调用
- 带返回值的方法的定义和调用
总结:
- 方法其实只有这一种格式
修饰符 返回值类型 方法名(参数类型 参数名){...方法体...return 返回值;
}
14.1.1 最简单的方法定义与调用
格式:
public static void 方法名(){方法体
}
示例代码:
public class MethodExercise1 {public static void main(String[] args) {HelloWorld();}public static void HelloWorld(){System.out.println("HelloWorld");}
}
14.1.2 带参数的方法定义和调用
示例代码:
public class MethodExercise2 {public static void main(String[] args) {Add(10, 20);}public static void Add(int a, int b) {System.out.println(a + b);}
}
14.1.3 带返回值的方法的定义和调用
格式:
修饰符 返回值类型 方法名(参数类型 参数名){...方法体...return 返回值;
}
示例代码:
public class MethodExercise3 {public static void main(String[] args) {int result;result = Add(10, 20);System.out.println(result);}public static int Add(int a, int b) {int c = a + b;return c;}
}
14.1.4 小结
方法其实只有这一种格式
修饰符 返回值类型 方法名(参数类型 参数名){...方法体...return 返回值;
}
注意:
14.2 方法的重载
看一个需求:
我们定义一个方法用于求变量之和,虽然功能相同,但由于参数不同,我们写了一堆函数,每个函数名不同,用于区分
这样非常不方便记忆,那么是否可以将这些函数都用一个名字呢
示例:
public class MethodExercise4 {public static void main(String[] args) {int result1 = GetSum(10, 20);System.out.println(result1);double result2 = GetSum(10.1, 20.2, 30.3);System.out.println(result2);byte result3 = GetSum((byte) 1, (byte) 2, (byte) 3, (byte) 4);System.out.println(result3);}public static int GetSum(int a, int b) {return a + b;}public static double GetSum(double a, double b, double c) {return a + b + c;}public static byte GetSum(byte a, byte b, byte c, byte d) {return (byte) (a + b + c + d);}
}
运行结果:
30
60.599999999999994
10
小练习:复制数组
- 需求:定义一个方法copyOfRange(int[] arr, int form, int to)
- 功能:将数组arr中从索引from(包含from)开始。到索引to结束(不包含to)的元素复制到新的数组中,将新数组返回。
示例代码:
import java.util.Arrays;public class MethodExercise5 {public static void main(String[] args) {int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};int[] result = copyOfRange(arr, 2, 4);System.out.println(Arrays.toString(result));}public static int[] copyOfRange(int[] arr, int form, int to) {int[] result = new int[to - form];for (int i = 0; form < to; i++) {result[i] = arr[form];form += 1;}return result;}
}
14.3 方法的内存
14.3.1 方法调用的基本内存原理
先进先出
14.3.2 方法传递基本数据类型、引用数据类型的内存原理
首先区别基本数据类型与引用数据类型:
- 基本数据类型:整数类型、浮点数类型、布尔类型、字符类型
- 引用数据类型:除了上述类型的其他所有类型
从深层次区别:
小结:
14.4 方法中值传递时的内存
直接看两段代码:
public class ArgsDemo01 {public static void main(String[] args) {int number = 100;change(number);System.out.println(number); // 100}public static void change(int number){number = 200;}
}
number未发生变化,而下面一段代码:
public class ArgsDemo02 {public static void main(String[] args) {int[] number = {1, 2, 3, 4, 5};change(number);System.out.println(number[0]); // 200}public static void change(int[] number) {number[0] = 200;}
}
number[0]发生了变化,引用数据类型在传递时传递的是地址值。
15、综合练习
15.1 卖飞机
示例代码:
import java.util.Scanner;public class Exercise01 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输出机票原价:");int original_cost = sc.nextInt();System.out.println("请输出当前月份(1~12):");int month = sc.nextInt();System.out.println("请输入机票类型:1、经济仓; 2、头等仓。");int ticket_type = sc.nextInt();System.out.println("您的机票价格为:");InquireAirFare(original_cost, month, ticket_type);}public static void InquireAirFare(int original_cost, int month, int ticket_type){if(month>=5 && month<=10){if(ticket_type == 1){System.out.println(original_cost * 0.85);}else {System.out.println(original_cost * 0.9);}}else if((month>=1 && month<=4) || (month>=11 && month<=12)) {if(ticket_type == 1){System.out.println(original_cost * 0.65);}else {System.out.println(original_cost * 0.7);}}else {System.out.println("输入月份不合法");}}
}
示例结果:
请输出机票原价:
200
请输出当前月份(1~12):
1
请输入机票类型:1、经济仓; 2、头等仓。
1
您的机票价格为:
130.0
请输出机票原价:
200
请输出当前月份(1~12):
13
请输入机票类型:1、经济仓; 2、头等仓。
1
您的机票价格为:
输入月份不合法
15.2 找质数
判断101 ~ 200 之间有多少个质数(及素数),并输出所有质数
示例代码:
public class Exercise02 {public static void main(String[] args) {int num = 0;System.out.println("101 ~ 200 之间的质数如下: ");for (int i = 101; i <= 200; i++) {// 判断是否为质数boolean prime_number = true;for (int j = 2; j < i; j++) {if (i % j == 0) {prime_number = false;break;}}if(prime_number){System.out.println(i);num++;}}System.out.println("101 ~ 200 之间的质数数量为:" + num);}
}
输出结果:
101 ~ 200 之间的质数如下:
101
103
107
109
113
127
131
137
139
149
151
157
163
167
173
179
181
191
193
197
199
101 ~ 200 之间的质数数量为:21
15.3 开发验证码
- 实现一个随机产生一个5位的验证码,格式如下:
- 长度为5
- 前四位是大写字母 or 小写字母
- 最后一位是数字
示例代码:
import java.util.Random;public class Exercise03 {public static void main(String[] args) {char[] letter = new char[52]; // 存储a~z和A~Z共52个数for (int i = 0; i < 52; i++) {// 基于ASCII码表// a:97if (i <= 25) {letter[i] = (char) (97 + i);}// A:65else {letter[i] = (char) (65 + i - 26);}}// 开始随机产生验证码int random_number;String result = "";// 前4位为字母for(int i =0 ;i<4;i++){random_number = new Random().nextInt(letter.length);result += letter[random_number];}// 最后一位为 0~9 的一个数字result += new Random().nextInt(10);System.out.println(result);}
}
15.4 数组元素的复制
把一个数组中的元素复制到另一个新数组中
示例代码:
import java.util.Arrays;public class Exercise04 {public static void main(String[] args) {int[] old_arr = {1, 2, 3, 4, 5};int[] new_arr = new int[old_arr.length];for(int i=0;i<old_arr.length;i++){new_arr[i] = old_arr[i];}System.out.println(Arrays.toString(new_arr));}
}
15.5 评委打分
示例代码:
import java.util.Scanner;public class Exercise05 {public static void main(String[] args) {int[] mark = getMark(6);int max = getMax(mark);int min = getMin(mark);int ave = (getSum(mark) - max - min) / (mark.length - 2);System.out.println("平均分为:" + ave);}public static int[] getMark(int num) {int[] mark = new int[num];Scanner sc = new Scanner(System.in);for (int i = 0; i < num; i++) {System.out.println("请输出评分:");mark[i] = sc.nextInt();while (mark[i] < 0 || mark[i] > 100) {System.out.println("评分格式错误,请重新输入:");mark[i] = sc.nextInt();}}return mark;}public static int getMax(int arr[]) {int max = arr[0];if (arr.length == 1) {return arr[0];}for (int i = 1; i < arr.length; i++) {if (max < arr[i]) {max = arr[i];}}System.out.println("最大值为:" + max);return max;}public static int getMin(int arr[]) {int min = arr[0];if (arr.length == 1) {return arr[0];}for (int i = 1; i < arr.length; i++) {if (min > arr[i]) {min = arr[i];}}System.out.println("最小值为:" + min);return min;}public static int getSum(int arr[]) {int sum = 0;for (int i = 0; i < arr.length; i++) {sum += arr[i];}return sum;}
}
结果展示:
请输出评分:
10
请输出评分:
110
评分格式错误,请重新输入:
20
请输出评分:
30
请输出评分:
40
请输出评分:
50
请输出评分:
120
评分格式错误,请重新输入:
60
最大值为:60
最小值为:10
平均分为:35
03 字符串
1、String
1.1 API
API:应用程序编程接口
一些不懂的API可以查阅Java的API帮助文档
1.2 String概述
String的注意点:
小结:
1.3 创建String对象的两种方式
示例代码:
String创建对象的两种方式:
- 直接赋值:最常使用,简单且节约内存
- new
- 空参构造
- 有参构造
1.4 创建String对象时的内存变化
方式一、直接赋值:
方式二、new
较费内存
1.5 字符串的比较
1.5.1 情况一
先看一段代码:
String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2); // trueString s3 = new String("abc");
System.out.println(s1 == s3); // false
我靠,为什么直接赋值出来的abc和new出来的abc不相等?
这就需要我们了解==号到底比的时什么。
- 基本数据类型:比较数据值
- 引用数据类型:比较地址值
那么问题来了,如果我想只比较字符串的内容,不考虑地址值怎么办?
基于两个API:
示例代码:
String s1 = "abc";
String s2 = new String("Abc");boolean result1 = s1.equals(s2);
System.out.println(result1); // falseboolean result2 = s1.equalsIgnoreCase(s2);
System.out.println(result2); // true
备注:equalsIgnoreCase中的忽略大小写只适用与英文,中文的”一“和”壹“是不行的
1.5.2 情况二
键盘录入的abc和直接赋值的abc用==号比较不相等
String s1 = "abc";Scanner sc = new Scanner(System.in);
String s2 = sc.next(); // 输入 abcSystem.out.println(s1 == s2); // false
通过观察sc.next()源码可知,本质上还是用了new。
总结:
- 以后只要是想比较字符串的内容,就用那俩API
1.6 小练习
1.6.1 用户登录
示例代码:
import java.util.Scanner;public class StringExcise1 {public static void main(String[] args) {String name = "Abc";String password = "123456";for (int i = 0; i < 3; i++) {Scanner sc = new Scanner(System.in);System.out.println("请输入您的账号:");String n = sc.next();System.out.println("请输入您的密码:");String p = sc.next();if (n.equals(name) && p.equals(password)) {System.out.println("登录成功!");break;} else {System.out.println("用户名或者密码错误,您还有" + (2 - i) + "次机会,请重新输入。");}}}
}
结果展示:
请输入您的账号:
abc
请输入您的密码:
132
用户名或者密码错误,您还有2次机会,请重新输入。
请输入您的账号:
Abc
请输入您的密码:
314
用户名或者密码错误,您还有1次机会,请重新输入。
请输入您的账号:
Abc
请输入您的密码:
123456
登录成功!
1.6.2 遍历字符串、统计字符次数、字符串拼接和反转
需求:键盘录入字符串,使用程序实现遍历该字符串。
示例代码:
import java.util.Scanner;public class StringExcise2 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入一个字符串:");String s = sc.next();for (int i = 0; i < s.length(); i++) {System.out.println(s.charAt(i));}}
}
结果展示:
请输入一个字符串:
dasf
d
a
s
f
统计字符次数:键盘录入字符串,统计其中大写字母、小写字母、数字、其他字符的个数
示例代码:
import java.util.Scanner;public class StringExcise3 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入一个字符串:");String s = sc.next();int capitalLetter = 0; // 大写字母int smallLetter = 0; // 小写字母int figure = 0; // 数字int other = 0; // 其他字符for (int i = 0; i < s.length(); i++) {if(s.charAt(i) >= 'a' && s.charAt(i) <= 'z'){smallLetter += 1;}else if(s.charAt(i) >= 'A' && s.charAt(i) <= 'Z'){capitalLetter += 1;}else if(s.charAt(i) >= '0' && s.charAt(i) <= '9'){figure += 1;}else {other += 1;}}System.out.println("大写字母个数为:" + capitalLetter);System.out.println("小写字母个数为:" + smallLetter);System.out.println("数字个数为:" + figure);System.out.println("其他字符个数为:" + other);}
}
结果展示:
请输入一个字符串:
aAbc1230,,
大写字母个数为:1
小写字母个数为:3
数字个数为:4
其他字符个数为:2
拼接字符串
示例代码:
public class StringExcise4 {public static void main(String[] args) {int[] arr = {1, 2, 3, 4, 5};String result = StringSplicing(arr);System.out.println(result); // [1,2,3,4,5]}public static String StringSplicing(int arr[]) {if (arr == null) {return "";} else if (arr.length == 0) {return "[]";}String result = "[";for (int i = 0; i < arr.length; i++) {if (i == arr.length - 1) {result = result + arr[i] + "]";return result;}result = result + arr[i] + ',';}return result;}
}
字符串反转
示例代码:
import java.util.Scanner;public class StringExcise5 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输出需要反转的字符串:");String str = sc.next();String result = ReverseString(str);System.out.println(result);}public static String ReverseString(String str) {String result = "";for (int i = 0; i < str.length(); i++) {result += str.charAt(str.length() - i -1);}return result;}
}
结果展示:
请输出需要反转的字符串:
adc
cda
1.6.3 金额转换
思路:
示例代码:
import java.util.Scanner;public class StringDemo9 {public static void main(String[] args) {//1.键盘录入一个金额Scanner sc = new Scanner(System.in);int money;while (true) {System.out.println("请录入一个金额");money = sc.nextInt();if (money >= 0 && money <= 9999999) {break;} else {System.out.println("金额无效");}}//定义一个变量用来表示钱的大写String moneyStr = "";//2.得到money里面的每一位数字,再转成中文while (true) {//2135//从右往左获取数据,因为右侧是数据的个位int ge = money % 10;String capitalNumber = getCapitalNumber(ge);//把转换之后的大写拼接到moneyStr当中moneyStr = capitalNumber + moneyStr;//第一次循环 : "伍" + "" = "伍"//第二次循环 : "叁" + "伍" = "叁伍"//去掉刚刚获取的数据money = money / 10;//如果数字上的每一位全部获取到了,那么money记录的就是0,此时循环结束if (money == 0) {break;}}//3.在前面补0,补齐7位int count = 7 - moneyStr.length();for (int i = 0; i < count; i++) {moneyStr = "零" + moneyStr;}System.out.println(moneyStr);//零零零贰壹叁伍//4.插入单位//定义一个数组表示单位String[] arr = {"佰","拾","万","仟","佰","拾","元"};// 零 零 零 贰 壹 叁 伍//遍历moneyStr,依次得到 零 零 零 贰 壹 叁 伍//然后把arr的单位插入进去String result = "";for (int i = 0; i < moneyStr.length(); i++) {char c = moneyStr.charAt(i);//把大写数字和单位拼接到result当中result = result + c + arr[i];}//5.打印最终结果System.out.println(result);}//定义一个方法把数字变成大写的中文//1 -- 壹public static String getCapitalNumber(int number) {//定义数组,让数字跟大写的中文产生一个对应关系String[] arr = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};//返回结果return arr[number];}}
1.6.4 手机号屏蔽
需求:以字符串的形式从键盘接受一个手机号,将中间四位号码屏蔽
最终效果为:
131****9468
示例代码:
public class Test8手机号屏蔽 {public static void main(String[] args) {/*以字符串的形式从键盘接受一个手机号,将中间四位号码屏蔽最终效果为:131****9468*///1.键盘录入一个手机号码Scanner sc = new Scanner(System.in);System.out.println("请输入手机号码");String phoneNumber = sc.next();//13112349408//2.截取手机号码中的前三位String star = phoneNumber.substring(0, 3);//3.截取手机号码中的最后四位//此时我用substring方法,是用1个参数的,还是两个参数的?1个参数的会更好//因为现在我要截取到最后,所以建议使用1个参数的。String end = phoneNumber.substring(7);//4.拼接String result = star + "****" + end;System.out.println(result);}
}
1.6.5 敏感词替换
需求1:键盘录入一个 字符串,如果字符串中包含(TMD),则使用***替换
public class Test9敏感词替换 {public static void main(String[] args) {//1.定义一个变量表示骂人的话String talk = "后裔你玩什么啊,TMD";//2.把这句话中的敏感词进行替换String result = talk.replace("TMD", "***");//3.打印System.out.println(talk);System.out.println(result);}
}
需求2:如果要替换的敏感词比较多怎么办?
public class Test10多个敏感词替换 {public static void main(String[] args) {//实际开发中,敏感词会有很多很多//1.先键盘录入要说的话Scanner sc = new Scanner(System.in);System.out.println("请输入要说的话");String talk = sc.next();//后裔你玩什么啊,TMD,GDX,ctmd,ZZ//2.定义一个数组用来存多个敏感词String[] arr = {"TMD","GDX","ctmd","ZZ","lj","FW","nt"};//3.把说的话中所有的敏感词都替换为***for (int i = 0; i < arr.length; i++) {//i 索引//arr[i] 元素 --- 敏感词talk = talk.replace(arr[i],"***");}//4.打印结果System.out.println(talk);//后裔你玩什么啊,***,***,***,***}
}
1.6.6 身份证信息查看
身份证的每一位都是有固定的含义:
- 1、2位:省份
- 3、4位:城市
- 5、6位:区县
- 7-14位:出生年、月、日
- 15、16位:所在地派出所
- 17位:性别(奇数男性,偶数女性)
- 18位:个人信息码(随机产生)
要求打印内容方式如下:
人物信息为:
出生年月日:XXXX年X月X日
性别为:男/女
package com.itheima.stringdemo;public class StringDemo11 {public static void main(String[] args) {//1.定义一个字符串记录身份证号码String id = "321281202001011234";//2.获取出生年月日String year = id.substring(6, 10);String month = id.substring(10, 12);String day = id.substring(12, 14);System.out.println("人物信息为:");System.out.println("出生年月日:" + year + "年" + month + "月" + day + "日");//3.获取性别char gender = id.charAt(16);//'3' ---> 3//利用ASCII码表进行转换//'0' ---> 48//'1' ---> 49//'2' ---> 50//'3' ---> 51//'4' ---> 52//'5' ---> 53//'6' ---> 54//'7' ---> 55//'8' ---> 56//'9' ---> 57int num = gender - 48;if(num % 2 == 0){System.out.println("性别为:女");}else{System.out.println("性别为:男");}}
}
2、StringBuilder
2.1 概述
构造函数:
常用方法;
示例代码:
public class StringBuilderDemo1 {public static void main(String[] args) {// 1、创建对象StringBuilder sb = new StringBuilder("abc");// StringBuilder在内部已做过处理,打印出的不是地址值而是属性值System.out.println(sb); // abc// 2、添加元素 append()sb.append(1);sb.append(2.1);sb.append(true);System.out.println(sb); // abc12.1true// 3、反转 reverse()System.out.println(sb.reverse()); // eurt1.21cba// 4、获取长度 length()int len = sb.length();System.out.println(len); // 11// 5、将StringBuilder变回字符串 toString()String str = sb.toString();System.out.println(str); // eurt1.21cba}
}
应用场景:
- 字符串的拼接
- 字符串的反转
2.2 链式编程
链式编程:当我们在调用一个方法的时候,不需要用变量接收他的结果,可以继续调用其他方法。
示例代码:
StringBuilder str = new StringBuilder("abc");
int len = str.append(123).reverse().append("adc").length();
System.out.println(len); // 9
2.3 练习
反转字符串:键盘输入一个字符串,控制台输出其是否为反转字符串
示例代码:
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String str1 = sc.next();String str2 = new StringBuilder().append(str1).reverse().toString();System.out.println(str1.equals(str2));
结果展示:
请输入一个字符串:
abc
false
请输入一个字符串:
abcba
true
拼接字符串
示例代码:
public class StringBuilderDemo4 {public static void main(String[] args) {int[] arr = {1,2,3,4,5,6};String result = ConcatenationString(arr);System.out.println(result); // [1,2,3,4,5,6]}public static String ConcatenationString(int arr[]) {StringBuilder sb = new StringBuilder();sb.append("[");for (int i = 0; i < arr.length; i++) {if(i == arr.length -1){sb.append(arr[i]).append("]");break;}sb.append(arr[i]).append(",");}String result = sb.toString();return result;}
}
3、StringJoiner
3.1 概述
3.2 示例代码
示例代码一:
import java.util.StringJoiner;public class StringJoinerDemo1 {public static void main(String[] args) {// 1、创建对象,并设置间隔符StringJoiner sj = new StringJoiner("***");// 2、添加元素sj.add("aaa").add("bbb").add("ccc");// 3.打印结果System.out.println(sj); // aaa***bbb***cccSystem.out.println(sj.length()); // 15}
}
示例代码二:
import java.util.StringJoiner;public class StringJoinerDemo2 {public static void main(String[] args) {// 1、创建对象StringJoiner sj = new StringJoiner(",","[","]");// 2、添加元素sj.add("aaa").add("bbb").add("ccc");// 3.打印结果System.out.println(sj); // [aaa,bbb,ccc]System.out.println(sj.length()); // 13}
}
4、字符串原理
前两个在前文已讲述。
4.1 字符串拼接的底层原理
两种情况:
- 等号右边没有变量
- 等号右边有变量
4.1.1 等号右边没有变量
4.1.2 等号右边有变量
通过看StringBuilder中toString()的源码可知,在变回字符串时还是使用了new,也就是创建了一个新的对象
4.1.3 JDK8字符串拼接的底层原理
JDK8之前
s1+s2,先拼,后toString,至少创建了俩对象;然后再s3,又调用toString方法。
JDK8优化了,但还是很浪费资源
- JDK8会预估数组长度,如下面创建s4时,JDK8会预估出创建一个长为3的数组
总结:
所以遇到拼接,不要直接+,用StringBuilder和StringJoiner
4.2 StringBuilder提高效率的原理图
我们通过两道面试题理解一下:
4.3 StringBuilder源码分析
示例代码:
package day5.code;public class StringBuilderDemo5 {public static void main(String[] args) {StringBuilder sb1 = new StringBuilder();// StringBuilder的两个概念// 1、容量 capacity()// 2、长度 length()sb1.append("abc"); // 3System.out.println(sb1.capacity()); // 16System.out.println(sb1.length()); // 2StringBuilder sb2 = new StringBuilder();sb2.append("abcdefghijklmnopqrstuvwxyz"); // 26System.out.println(sb2.capacity()); // 34System.out.println(sb2.length()); // 26StringBuilder sb3 = new StringBuilder();sb3.append("abcdefghijklmnopqrstuvwxyz0123456789"); // 36System.out.println(sb3.capacity()); // 36System.out.println(sb3.length()); // 36StringBuilder sb4 = new StringBuilder();sb4.append("abcdefghijklmnopqrstuvwxyz0123456789abcd"); // 40System.out.println(sb4.capacity()); // 40System.out.println(sb4.length()); // 40}
}
5、综合练习
总结:
练习:转换罗马数字
示例代码:
import java.util.Scanner;public class StringTest1 {public static void main(String[] args) {// 1、输入字符串Scanner sc = new Scanner(System.in);System.out.println("请输入:");String str = sc.next();// 2、判断是否符合要求if (!checkStr(str)) {System.out.println("字符串不符合要求");return;}// 3、转换为罗马数字StringBuilder result = new StringBuilder();for (int i = 0; i < str.length(); i++) {// 基于ascii码表,将字符的0~9变为数字// 忘记ascii表,可以基于System.out.println('0' + 0);得到0对应48int num = str.charAt(i) - 48;result.append(changeLuoMa(num));}System.out.println(result);}public static boolean checkStr(String str) {// 1、长度为小于等于9if (str.length() > 9) {return false;}// 2、只能是数字for (int i = 0; i < str.length(); i++) {if (str.charAt(i) > '9' || str.charAt(i) < '0') {return false;}}return true;}// 将一个0~9的整数转换为一个字符(其对应的罗马数字)public static String changeLuoMa(int number) {//定义一个数组,让索引跟罗马数字产生一个对应关系String[] arr = {"", "Ⅰ", "Ⅱ", "Ⅲ", "Ⅳ", "Ⅴ", "Ⅵ", "Ⅶ", "Ⅷ", "Ⅸ"};return arr[number];}
}
结果展示:
请输入:
123456789
ⅠⅡⅢⅣⅤⅥⅦⅧⅨ
调整字符串
解题思路:
示例代码:
package day5.code;public class StringTest2 {public static void main(String[] args) {String str1 = "abcd";String str2 = "cdab"; // true// String str2 = "cdaa"; // falseboolean result = checkStr(str1, str2);System.out.println(result);}public static boolean checkStr(String str1, String str2){for(int i=0;i<str1.length();i++){str1 = rotateStr(str1);if(str1.equals(str2)){return true;}}return false;}public static String rotateStr(String str){char first = str.charAt(0);String end = str.substring(1);return end + first;}
}
04 集合
1、集合和数组的对比
为什么要有集合?
集合和数组的对比:
- 长度
- 数组:长度固定
- 集合:长度可变,自动扩容
- 存储类型:
- 数组:基本数据类型、引用数据类型
- 集合:基本数据类型(需要包装类,详情见下文练习第二题)、引用数据类型
2、集合的基本使用
示例代码:
import java.util.ArrayList;public class ArrayListDemo1 {public static void main(String[] args) {// 1.创建集合:JDK7之后的创建方式ArrayList<String> list = new ArrayList<>();System.out.println(list); // []// 2.添加元素boolean result1 = list.add("aaa");System.out.println(result1); // truelist.add("bbb");list.add("ccc");list.add("ddd");list.add("eee");System.out.println(list); // [aaa, bbb, ccc, ddd, eee]// 3.删除元素:删除指定元素 or 索引boolean result2 = list.remove("aaa");System.out.println(result2); // trueString result3 = list.remove(0);System.out.println(result3); // bbb// 4.修改元素System.out.println(list); // [ccc, ddd, eee]list.set(0, "aaa");System.out.println(list); // [aaa, ddd, eee]// 5.查String temp = list.get(1);System.out.println(temp); // dddint len = list.size();System.out.println(len); // 3}
}
3、集合练习
集合的遍历方式
示例代码:
import java.util.ArrayList;public class ArrayListDemo2 {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();list.add("hello");list.add("world");String result = "[";for (int i = 0; i < list.size(); i++) {if (i == list.size() - 1) {result = result + list.get(i) + "]";break;}result = result + list.get(i) + ",";}System.out.println(result); // [hello,world]}
}
添加数字并遍历
关于基本数据类型对应的包装类:
示例代码:
在练习一的基础上改一下集合的创建和添加的元素即可。
import java.util.ArrayList;public class ArrayListDemo3 {public static void main(String[] args) {ArrayList<Integer> list = new ArrayList<>();list.add(0);list.add(1);list.add(2);String result = "[";for (int i = 0; i < list.size(); i++) {if (i == list.size() - 1) {result = result + list.get(i) + "]";break;}result = result + list.get(i) + ",";}System.out.println(result); // [0,1,2]}
}
添加学生对象并遍历
- 需求:定义一个集合,添加一些学生对象并遍历
- 学生类的属性:姓名、年龄。
示例代码:
import java.util.ArrayList;public class ArrayListDemo4 {public static void main(String[] args) {ArrayList<Student> list = new ArrayList<>();Student s1 = new Student("a", 18);Student s2 = new Student("b", 19);Student s3 = new Student("c", 20);list.add(s1);list.add(s2);list.add(s3);for (int i = 0; i < list.size(); i++) {Student stu = list.get(i);System.out.println(stu.getName() + "," + stu.getAge());}}
}
结果展示:
a,18
b,19
c,20
添加学生对象并遍历 - 升级版
- 需求:定义一个集合,添加一些学生对象并遍历
- 学生类的属性:姓名、年龄。
- 需求2:对象的数据来自键盘录入
示例代码:
package day6.code;import java.util.ArrayList;
import java.util.Scanner;public class ArrayListDemo5 {public static void main(String[] args) {ArrayList<Student> list = new ArrayList<>();Scanner sc = new Scanner(System.in);System.out.println("请输入需要录入的学员数量: ");int num = sc.nextInt();for(int i=0;i<num;i++){Student s = new Student();System.out.println("请输入学员姓名:");String name = sc.next();System.out.println("请输入学员年龄:");int age = sc.nextInt();s.setName(name);s.setAge(age);list.add(s);}for (int i = 0; i < list.size(); i++) {Student stu = list.get(i);System.out.println(stu.getName() + "," + stu.getAge());}}
}
结果展示:
请输入需要录入的学员数量:
3
请输入学员姓名:
a
请输入学员年龄:
12
请输入学员姓名:
b
请输入学员年龄:
18
请输入学员姓名:
c
请输入学员年龄:
20
a,12
b,18
c,20
返回多个数据
示例代码:
package day6.code;import java.util.ArrayList;public class ArrayListDemo6 {public static void main(String[] args) {ArrayList<Phone> list = new ArrayList<>();Phone p1 = new Phone("小米", 1000);Phone p2 = new Phone("苹果", 8000);Phone p3 = new Phone("锤子", 2999);list.add(p1);list.add(p2);list.add(p3);ArrayList<Phone> result = new ArrayList<>();result = getPhoneInfo(list);for (int i = 0; i < result.size(); i++) {Phone p = result.get(i);System.out.println(p.getBrand() + "," + p.getPrice());}}public static ArrayList<Phone> getPhoneInfo(ArrayList<Phone> list){ArrayList<Phone> result = new ArrayList<>();for(int i = 0; i < list.size(); i++) {if(list.get(i).getPrice() < 3000){Phone p = list.get(i);result.add(p);}}return result;}
}
结果展示:
小米,1000.0
锤子,2999.0
Java基础01 基础语法相关推荐
- 【Java】01基础-14集合03
1.Map集合 1.1Map集合概述和特点[理解] Map集合概述 interface Map<K,V> K:键的类型:V:值的类型 Map集合的特点 双列集合,一个键对应一个值 键不可以 ...
- C语言基础-01 基础知识
一.C语言的特点 二.最简单的C语言程序 1.基础知识 (1)scanf: 输入,从命令行将用户输入的值,保存到变量中. int x = 0: scanf("%d" ,&x ...
- Java 基础-01 Java语言入门
文章目录 Java 基础-01 Java语言入门 1.计算机基本概念 1.1 计算机概述 1.2 计算机组成 1.3 CPU.内存与硬盘 2.软件基本概念 2.1 软件概述 2.2 人机交互方式 2. ...
- Java基础01 注释
JAVA基础01 注释 注释 平时我们编写代码,在代码量比较少的时候,我们还是可以看懂自己写的,但是当项目结构一旦复杂起来,我们就需要用到注释了. 注释并不会被执行,是给我们写代码的人看的 书写注释是 ...
- 【重难点】【Java基础 01】一致性哈希算法、sleep() 和wait() 的区别、强软弱虚引用
[重难点][Java基础 01]一致性哈希算法.sleep() 和wait() 的区别.强软弱虚引用 文章目录 [重难点][Java基础 01]一致性哈希算法.sleep() 和wait() 的区别. ...
- Java程序设计语言基础01:绪论
目录 1. 初探HelloWorld程序 1.1 类(Class)语法元素 1.2 main方法(main method)语法元素 1.3 System.out.println 1.4 字符串 2. ...
- 二-Java基础-作业-基础语法
文章目录 前言 二-Java基础-环境搭建-Eclipse下载步骤和安装步骤2 二-Java基础-环境搭建-创建工程3 Java-环境搭建 总结 前言 # 二-Java基础-环境搭建-JDK-11.0 ...
- java 01 02_Java知识系统回顾整理01基础02面向对象01类和对象
一.面向对象实例--设计英雄这个类 LOL有很多英雄,比如盲僧,团战可以输,提莫必须死,盖伦,琴女 所有这些英雄,都有一些共同的状态 比如,他们都有名字,hp,护甲,移动速度等等 这样我们就可以设计一 ...
- java 响铃 bel 使用_Java基础01
JAVA基础01 一.注释 1. 当项目结构一旦复杂起来,我们就要使用注释. 2. 注释不被执行,提高可读性,方便团队开发. 3. 多写注释是一个非常好的习惯 4. 单行注释 // 内容 5. 多行注 ...
最新文章
- CDN和Web Cache领域相关的经典书籍推荐
- mysql 锁机制 mvcc_轻松理解MYSQL MVCC 实现机制
- JaveWeb学习之Servlet(二):ServletConfig和ServletContext
- 【leetcode】16 3Sum Closest
- opencv java 去干扰_java - OpenCV Java修补图像格式要求 - 堆栈内存溢出
- C++学习系列笔记(四)
- hdu 1907John博弈
- 普林斯顿陈丹琦:如何让「大模型」变小
- win10隐藏任务栏_让你的 Windows 任务栏智能化起来
- excel复习-数据透视表
- Altium Designer 打印PCB板元件位置图
- 多个物体模型快速制作爆炸图?试一试ThingJS
- JZOJ. 5421【NOIP2017提高A组集训10.25】嘟嘟噜
- Windows中如何修改Intel网卡的注册表使Wireshark可以抓取802.1q tag包
- 谈谈 跨境劳工的噩梦深坑。
- 小白如何学3D建模?从零开始变大神
- 如何固化zynq程序
- 帮师妹写的裁判文书内容提取程序:可做进一步提取模板
- WIN10系统下运行地下管线数据处理系统
- 如何解析Plist文件?