1.三目运算符
语法格式:
数据类型 x = (表达式) ? value1 : value2;
执行流程: 来判断表达式 你如果表达式为true 就将value1赋值给x这个变量, 如果为false 就将value2赋值给变量x
2.循环结构
2.1 while循环
语法格式:
while (布尔表达式) {
语句体
}
执行流程: 当代码执行到while关键字的时候,先去判断布尔表达式,如果布尔表达式为false,就不会执行
2.2do-while循环【几乎不会用到】
语法格式:
do {
语句体
} while(布尔表达式);
执行流程:首先代码执行到do 然后执行do后面大括号中的语句体,再去判断while后面的布尔表达式
2.3for循环【重点】
语法格式:
for (表达式1(初始化条件); 布尔表达式2(终止条件); 表达式3(循环条件)) {
语句体
}
执行流程: 首先执行表达式1,再执行表达式2,如果布尔表达式2为true,执行大括号中语句体。然后再执行表达式3,再执行表达式2,再次判断布尔表达式2,直到为false,就不执行语句体。就意味着循环结束
2.4嵌套循环【重点难点】
前提是循环
一个循环里面套另外一个循环。秉承着一个特点: 从外层循环先进入到内层循环,然后 内存循环先结束
然后再回到外层循环,再进入到内层循环,内层循环结束,再会带外层循环
2.4.1案例 九九乘法表
1*1=1
12=2 22=4
13=3 23=6 3*3=9
…
找规律 几行 9行 第一行 1列 第二行 2列 …
每行的列数和 每行息息相关的
package com.qf.a_sanmu;
public class Demo15 {
public static void main(String[] args) {
//打印九九乘法表
//你们自己分析代码的执行的流程!!!
for (int i = 1; i < 10; i++) {
for (int j = 1; j <= i; j++) {
//1*2=2
System.out.print(j + "*" + i + "=" + i*j + "\t");
}
System.out.println();
}
}
}
2.4.2案例 等腰三角形
* 第一行 3个空格 1个*
*** 第二行 2个空格 3 个*
***** 第三行 1个空格 5个*
******* 第四行 0个空格 7个*
for (int i = 1; i <= 4; i++) {
//打印空格的
for (int j = 1; j <= (4 - i); j++) {
System.out.print(" ");
}
//打印*
for (int j = 1; j <= (2 * i) - 1; j++) {
System.out.print("*");
}
System.out.println();
}
3.方法【重点】
3.1定义方法的语法格式
无参 无返回值的方法
有参 无返回值的方法
无参有返回值的方法
有参有返回值的方法
3.1.1无参无返回值的方法
语法格式:
public static void 方法的名字 () {
语句体
}
注意事项:
1.方法的声明必须放在类中,main方法的外面
2.方法声明完以后,一定要记得在main函数中调用
3.1.2有参无返回值的方法
语法格式:
public static void 方法的名字 (数据类型 变量1, 数据类型 变量2,... ) {
语句体
}
3.1.3无参无返回值的方法
语法格式:
public static 数据类型 方法的名字() {
return 返回的数据;//返回的数据的数据类型一定是声明方法的时候 的数据类型是一致的
}
3.1.4有参有返回值的方法
语法格式:
public static 数据类型 方法的名字 (数据类型 变量1, 数据类型 变量2,...) {
return 返回的数据;
}
4.break和continue
4.1break
语法格式:
break;
只能在swicth-case中或者 循环中 其他地方不能用!!!
4.2continue
语法格式:
continue;
循环中 结束本次循环,进入到下次循环
总结:
break; 用在switch和循环中
continue; 用在循环中
5.数组【重点】
5.1数组如何定义
数组定义:
数据类型[] 数组名字 = 数组的值;
数组详细的语法格式:
第一种:
数据类型[] 数组的名字 = {值1, 值2, 值3,...};
或
数据类型 数组的名字 []= {值1, 值2, 值3,...};
第二种:
数据类型[] 数组的名字 = new 数据类型[容量];
或者
数据类型 数组的名字[] = new 数据类型[容量];
第一种和第二种区别: 第一种即声明了数组又对数组赋值了
第二种只是声明空的数组而已,暂时还没有赋值
第三种:【很少】
语法格式:
数据类型[] 数组的名字 = new 数据类型[]{值1, 值2, 值3,...};
其实是第一种的完全写法
5.2数组如何赋值
通过数组的下标(索引)进行赋值
int[] arr = new int[3];
arr[0] = 90;
arr[1] = 190;
arr[2] = 89;
arr[3] = 810;//这个地方会出问题的
5.3对数组如何取值
通过下标来取值
5.4二维数组【了解】
语法格式
数据类型[][] 数组名字 = new 数据类型[容量][荣量];
5.5数组可以作为方法的参数
方法的参数 可以是哪些数据类型? 八大基本数据类型 和String
同理 数组也是可以作为方法的参数的
5.6数组可以作为方法的返回值
方法的返回值可以是八大基本数据类型 和String ,数组也是作为返回值的
6.排序问题
6.1选择排序
原理: 找到最小值的索引 , 然后和第一个数据进行交换。。再除了第一个的剩余的数据的最小值索引
然后和第二个数据进行交换。以此类推即可
int[] = {4,3 ,2,1}
先遍历一遍 找到 最小值的索引 3 然后交换位置 {1, 3, 2, 4}
再遍历一遍(除了第一个数) 找最小值的索引 2 然后交换位置 {1, 2, 3,4}
再遍历一遍(除了第前两个数) 找最小值的索引 {1, 2, 3,4}
package com.qf.test;
import java.util.Arrays;
public class Demo16 {
public static void main(String[] args) {
//选择排序
int[] arr = {4, 3, 2, 1};
for (int i = 0; i < arr.length - 1; i++) {//控制轮数
int minIndex = i;//最小值的索引的变量
for (int j = i + 1; j < arr.length; j++) {//遍历按数据比较大小然后取 最小值的索引
if (arr[minIndex] > arr[j]) {
minIndex = j;
}
}
//交换位置
int temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
System.out.println(Arrays.toString(arr));
}
}
6.2冒泡排序
从小到大进行排序
原理: 比较两个相邻的元素的大小,如果左边比右边大,就交换位置。每一对都要比较
int[] arr = {1, 5, 2,3};
第一轮: for
{1, 5,2,3} 比较1和5
{1,2,5,3}比较5和2
{1,2,3,5}比较的是5和3
第二轮:
{1,2,3,5} 比较 1和2
{1,2,3,5} 比较2 和3
第三轮:
{1,2,3,5} 比较1和2
package com.qf.test;
import java.util.Arrays;
public class Demo17 {
public static void main(String[] args) {
int[] arr = {1,5, 3, 2};
for (int i = 0; i < arr.length - 1; i++) {//轮数
for (int j = 0; j < arr.length - i - 1; j++) {
//两两比较,然后如果左边比右边大的话,就交换位置
if (arr[j] > arr[j + 1]) {
//交换位置
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
6.3一键排序
Arrays.sort(arr)