这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天
3 流程控制语句
1 分支结构
-
if else 很简单,不多表述,与c相同
-
if(heartBeats < 60 || heartBeats > 100){ System.out.println("你需要做进一步的检查"); }
-
-
switch case
执行完此case的执行语句以后。
- 情况1:如果遇到break,则执行break并跳出当前的switch-case结构
- 情况2:如果没有遇到break,则会继续执行当前case之后的其它case中的执行语句。--->case穿透 ... 直·到遇到break关键字或执行完所有的case及default的执行语句,跳出当前的switch-case结构
-
- switch(表达式)中表达式的值必须是下述几种类型之一:byte,short,char,int,枚举 (jdk 5.0),String (jdk 7.0);
- case子句中的值必须是常量,不能是变量名或不确定的表达式值或范围;
- 同一个switch语句,所有case子句中的常量值互不相同;
- break语句用来在执行完一个case分支后使程序跳出switch语句块;
- 如果没有break,程序会顺序执行到switch结尾。default子句是可选的。同时,位置也是灵活的。当没有匹配的case时,执行default语句。
-
int num = 1; switch(num){ case 0: System.out.println("zero"); break; case 1: System.out.println("one"); break; case 2: System.out.println("two"); break; case 3: System.out.println("three"); break; default: System.out.println("other"); //break; }
2 循环结构
三种循环结构:for、while、do-while
-
for循环 和c没有区别
-
while和c没有区别
-
// 猜随机数 public class GuessNumber { public static void main(String[] args) { //获取一个随机数 int random = (int) (Math.random() * 100) + 1; //记录猜的次数 int count = 1; //实例化Scanner Scanner scan = new Scanner(System.in); System.out.println("请输入一个整数(1-100):"); int guess = scan.nextInt(); while (guess != random) { if (guess > random) { System.out.println("猜大了"); } else if (guess < random) { System.out.println("猜小了"); } System.out.println("请输入一个整数(1-100):"); guess = scan.nextInt(); //累加猜的次数 count++; } System.out.println("猜中了!"); System.out.println("一共猜了" + count + "次"); } }
-
-
Do-while 循环至少执行一次
- 遍历有明显的循环次数(范围)的需求,选择for循环
- 遍历没有明显的循环次数(范围)的需求,选择while循环
- 如果循环体语句块至少执行一次,可以考虑使用do-while循环
- 本质上:三种循环之间完全可以互相转换,都能实现循环的功能
3 Scanner:键盘输入功能的实现
- 导包:
import java.util.Scanner; - 创建Scanner类型的对象:
Scanner scan = new Scanner(System.in); - 调用Scanner类的相关方法(
next() / nextXxx()),来获取指定类型的变量 - 释放资源:
scan.close();
Scanner scanner = new Scanner(System.in);//System.in默认代表键盘输入
//③根据提示,调用Scanner的方法,获取不同类型的变量
System.out.println("欢迎光临你好我好交友网站!");
System.out.print("请输入你的网名:");
String name = scanner.next();
System.out.print("请输入你的年龄:");
int age = scanner.nextInt();
System.out.print("请输入你的体重:");
double weight = scanner.nextDouble();
System.out.print("你是否单身(true/false):");
boolean isSingle = scanner.nextBoolean();
scanner.close();
4 获取随机数
Math.random() // 获取0.0到1.0的double
4 数组
1 数组的特点
- 数组是一个引用数据类型,其中的元素可以是任何数据类型。
- 创建数组对象会在内存中开辟一整块连续的空间。占据的空间的大小,取决于数组的长度和数组中元素的类型。
- 数组中的元素在内存中是依次紧密排列的,有序的。
- 数组,一旦初始化完成,其长度就是确定的。数组的长度一旦确定,就不能修改。
- 我们可以直接通过下标(或索引)的方式调用指定位置的元素,速度很快。
- 数组名中引用的是这块连续空间的首地址。
2 数组的使用
2.1 数组的声明与初始化简单使用
这个数组不语言一样,c语言通常将声明和初始化放到一起,java中更喜欢分开,声明是声明,初始化要new一下
// 声明和初始化
// 静态初始化
double[] prices;
prices= new double[]{1.0,2,3};
// 动态初始化
String[] foods= new String[5];
int[] arr1={1,2,3} //类型推断
// 获取长度
foods.length
默认的初始化值
3 数组的内存解析
为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
jvm运行时内存环境划分为5个区域:程序计数器,虚拟机栈,本地方法栈,堆,方法区。
与数组内存相关的内存结构解释虚拟机栈以及堆
虚拟机栈:用于存放声明的变量
堆:用于存放数组的实体,即所有元素
举例
4 二维数组
-
初始化
-
// 静态初始化 String [][] b= new String[][]{{"1","sdfws"},{"sfsf","sfwe","SS"}}; // 第二维长度可以不一样
// 动态初始化
String [][] c=new String[2][];
//真正用的时候还要new c[0]= new String[5]
String [][] c=new String[][3];
-
-
内存解析
5 Arrays工具类
位置 java.utils.Arrays
Arrays.equals(arr1,arr2) // 两个数组元素是否相同 Arrays.toString(arr1) //转为string Arrays.fill(arr1,10) //每个元素变为10 Arrays.sort(arr1) // 快排 Arrays。binarySearch(arr3,15) //二分查找