目录
1.三目运算符
语法格式:
数据类型 x = (表达式) ? value1 : value2;
执行流程: 来判断表达式 你如果表达式为true 就将value1赋值给x这个变量, 如果为false 就 将value2赋值给变量x
package com.qf.a_sanmu;
public class Demo1 {
public static void main(String[] args) {
int a = 30;
int c;
//int c = a > 31 ? 20 : 21;
//执行流程: 判断a > 31 的值 如果 是true 将 20赋值给c 如果是false 将21 赋值给c
//System.out.println(c);
//三目运算符和if-else 类似
if (a > 31) {
c = 20;
} else {
c = 21;
}
System.out.println(c);
}
}
2.循环结构
while循环
语法格式: while (布尔表达式) {
语句体
}
执行流程: 当代码执行到while关键字的时候,先去判断布尔表达式,如果布尔表达式为false,就不会执行
语句体。如果布尔表达式为true 执行语句体,然后(重要) 再去判断布尔表达式,如果布尔表达式为true
执行语句体,然后再去判断布尔表达式,直到布尔表达式为false的时候,循环就结束了(就不再执行语句体了)。接着执行循环以外的代码
package com.qf.a_sanmu;
public class Demo3 {
public static void main(String[] args) {
//打印4遍的中午吃烤羊排,使用while循环
//无论任何循环 都要必须有三个条件:
//1.初始化条件
//2.循环条件
//3.终止条件
/**
* 分析代码,主要是分析执行的流程:
* i=0 0<4 true 执行大括号里面的代码 打印第一次的 中午吃烤羊排 i++
* i=1 1<4 true 执行大括号里面的代码 打印第二次的 中午吃烤羊排 i++
* i=2 2<4 true 执行大括号里面的代码 打印第三次的 中午吃烤羊排 i++
* i=3 3<4 true执行大括号里面的代码 打印第四次的 中午吃烤羊排 i++
* i=4 4<4 false 就不再执行大括号中的代码了!!!
*/
//1.声明一个变量
int i = 0;//初始化条件
while (i < 4) {// i < 4 终止条件
System.out.println("中午吃烤羊排");
i++;//i++ 是循环条件 自身加1
}
}
}
3.for循环【重点】
语法格式:
for (表达式1; 布尔表达式2; 表达式3) {
语句体
}
表达式1: 初始化的条件
表达式2: 终止条件
表达式3: 循环条件
执行流程: 首先执行表达式1,再执行表达式2,如果布尔表达式2为true,执行大括号中语句体。然后再执行表达式3,再执行表达式2,再次判断布尔表达式2,直到为false,就不执行语句体。就意味着循环结束
package com.qf.a_sanmu;
public class Demo9 {
public static void main(String[] args) {
//打印3遍今天好热,但是我穿了棉袄
/**
* i = 0 0 <3 true 执行大括号中的语句体 打印第一遍的今天好热,但是我穿了棉袄 i++
* i = 1 1<3 true 执行大括号中的语句体 打印第二遍的今天好热,但是我穿了棉袄 i++
* i=2 2<3 true执行大括号中的语句体 打印第三遍的今天好热,但是我穿了棉袄 i++
* i=3 3<3 false 大括号中的代码不再执行 循环结束了
*/
for (int i = 0; i < 3; i++) {
System.out.println("今天好热,但是我穿了棉袄");
}
}
}
4.嵌套循环【重点难点】
前提是循环
一个循环里面套另外一个循环。秉承着一个特点: 从外层循环先进入到内层循环,然后 内存循环先结束
然后再回到外层循环,再进入到内层循环,内层循环结束,再会带外层循环
package com.qf.a_sanmu;
public class Demo14 {
public static void main(String[] args) {
//打印直角三角形
/**
* i = 1 1<5 true 执行大括号内的内层的for循环
* j=1 1<=1 true 打印1个* j++
* j=2 2<=1 false 立马换行 i++
* i = 2 2<5 true 执行大括号内的内层的for循环
* j=1 1<= 3 true 打印* j++
* j=2 2<= 3 true 打印一个* j++
* j=3 3<=3 true 打印一个* j++
* j=4 4<=3 false 内层循环结束 换行 i++
* i= 3 3<5 true 执行大括号内的内层的for循环
* j=1 1<=5 true 打印一个* j++
* ...
* j=4 4<=5 true 打印一个* j++
* j=5 5<=5 true 打印一个* j++
* j=6 6<=5 false 内层循环结束 换行 i++
* i= 4 4<5 true 执行大括号内的内层的for循环
* j=1 1<=7 true 打印一个* j++
* ...
* j=7 7<=7 true 打印一个* j+=
* j=8 8<= 7false 内层循环结束 换行 i++
* i=5 5<5 false 整体循环结束
*
*/
for (int i = 1; i < 5; i++) {
for (int j = 1; j <= (2 * i) - 1; j++) {
System.out.print("*");
}
System.out.println();//换行
}
}
}
5.方法
定义方法的语法格式
无参 无返回值的方法:
语法格式:
public static void 方法的名字 () {
语句体
}
注意事项:
1.方法的声明必须放在类中,main方法的外面
2.方法声明完以后,一定要记得在main函数中调用
package com.qf.a_homework;
public class Demo6 {
//main方法必须要有的
public static void main(String[] args) {
//必须在main主函数中调用 才会执行
//方法的调用
printEatSheep();
}
//打印5遍的中午吃烤喜羊羊
//void 是无返回值的
//printEatSheep 方法的名字 和变量的命名规则是一样的
public static void printEatSheep () {
//大括号中写语句体,就是咱们需求功能
for (int i = 0; i < 5; i++) {
System.out.println("中午吃烤喜羊羊");
}
}
}
有参 无返回值的方法:
语法格式:
public static void 方法的名字 (数据类型 变量1, 数据类型 变量2,... ) {
语句体
}
package com.qf.a_homework;
public class Demo8 {
public static void main(String[] args) {
//34是实参 实际参数
printNum(34);
printHello(8);
//printHello("goudan");
printStr("孤舟蓑笠翁,独钓寒江雪");
printNStr(9, "已是黄昏独自愁");
}
public static void printNum (int sb) {//int num 是形参 形式参数
System.out.println(sb);
}
//打印n遍的hello world
public static void printHello (int num) {
for (int i = 0; i < num; i++) {
System.out.println("hello world");
}
}
//打印随便字符串 打印8遍
public static void printStr(String str) {
for (int i = 0; i < 8; i++) {
System.out.println(str);
}
}
//打印n遍的随便的字符串
public static void printNStr (int a, String str) {
for (int i = 0; i < a; i++) {
System.out.println(str);
}
}
}
无参有返回值的方法:
语法格式:
public static 数据类型 方法的名字() {
return 返回的数据;//返回的数据的数据类型一定是声明方法的时候 的数据类型是一致的
}
package com.qf.a_homework;
public class Demo9 {
public static void main(String[] args) {
int a = giveNum();// 会返回一个值 5 将返回的数据 给变量 a
System.out.println(a);
System.out.println(giveString());//可以将返回的值 直接打印的
//System.out.println(str);
}
//声明一个无参有返回值的方法
public static int giveNum () {
return 5;//返回一个5 这个整型的数据
}
//声明一个返回值是字符串类型的数据的方法
public static String giveString () {
String str = "呵呵 爽啊 ";
str += "xixi";
return str;
}
}
有参有返回值的方法:
语法格式:
public static 数据类型 方法的名字 (数据类型 变量1, 数据类型 变量2,...) {
return 返回的数据;
}
package com.qf.a_homework;
public class Demo10 {
public static void main(String[] args) {
int sum = add(3, 4);
System.out.println(sum);
}
public static int add(int a , int b) {
return a + b;
}
}
6.数组
数组在Java中如何定义的
变量定义:
数据类型 变量名字 = 值;
数组定义:
数据类型[] 数组名字 = 数组的值;
数组详细的语法格式:
第一种:
数据类型[] 数组的名字 = {值1, 值2, 值3,...}; 或 数据类型 数组的名字 []= {值1, 值2, 值3,...};第二种:
数据类型[] 数组的名字 = new 数据类型[容量]; 或者 数据类型 数组的名字[] = new 数据类型[容量];第一种和第二种区别: 第一种即声明了数组又对数组赋值了
第二种只是声明空的数组而已,暂时还没有赋值
第三种:【很少】
语法格式:
数据类型[] 数组的名字 = new 数据类型[]{值1, 值2, 值3,...};其实是第一种的完全写法
package com.qf.test;
import java.util.Arrays;
public class Demo4 {
public static void main(String[] args) {
//数组第一种声明方式 :数据类型[] 数组的名字 = {值1, 值2, 值3,...};
int[] arr = {23, 34, 12, 15};
System.out.println(arr);//[I@15db9742 内存地址 但是数据看不到 那咋办?
System.out.println(Arrays.toString(arr));// 将一个内存地址形式的数据变成 人类可以看懂的
//[23, 34, 12, 15]
String[] strs = {"狗蛋","文博", "广瑞"};
System.out.println(strs);//@6d06d69c
System.out.println(Arrays.toString(strs));//[狗蛋, 文博, 广瑞]
boolean[] bools = {true, true, false, true};
System.out.println(bools);//[Z@7852e922
System.out.println(Arrays.toString(bools));//[true, true, false, true]
float[] f2 = {12.3f, 45.6F};
//声明一个char类型的数组
char[] chs = {'a', '中', '9'};
System.out.println(chs);//a中9 这个比较特殊 打印不是地址 是数组中值组成的
}
}
package com.qf.test;
import java.util.Arrays;
public class Demo5 {
public static void main(String[] args) {
//第二种声明方式: 数据类型[] 数组的名字 = new 数据类型[容量];
int[] arr = new int[3];//在声明一个数组 ,且容量为3 只能存放3个数据 空的数组
//arr = {0,0,0};
System.out.println(arr);//内存地址
System.out.println(Arrays.toString(arr));//[0, 0, 0]
//此时是空的数组
String[] strs = new String[4];
System.out.println(strs);
System.out.println(Arrays.toString(strs));//[null, null, null, null]
//这种方式的声明 是好比弄好了桌子 空桌子
}
}
1.3第二种声明方式 是空的数组,如何赋值
package com.qf.test;
import java.util.Arrays;
public class Demo7 {
public static void main(String[] args) {
//第二种数组的声明方式
int[] arr = new int[3];//arr = {0,0,0};
//对这个空的数组进行的的赋值
arr[0] = 23;//将23d赋值给 下标为0 的arr这个数组 arr = [23, 0, 0]
//System.out.println(Arrays.toString(arr));
arr[1] = 45;
//System.out.println(Arrays.toString(arr));//arr = [23, 45, 0]
arr[2] = 678;
System.out.println(Arrays.toString(arr));//arr = [23, 45, 678]
//arr[3] = 250; 这个下标越界
//ArrayIndexOutOfBoundsException 数组下标越界
//System.out.println(Arrays.toString(arr));
System.out.println("=========");//arr = [23, 45, 678]
/**
* i=0 0<3 true arr[0] = 89 arr = [89, 45, 678] i++
* i=1 1<3 true arr[1] = 90 arr=[89, 90, 678] i++
* i=2 2<3 true arr[2]= 91 arr =[89, 90, 91] i++
* i=3 3<3 false 循环结束以后 arr =[89, 90, 91]
*/
for (int i = 0; i < 3; i++) {
arr[i] = 89 + i;
}
System.out.println(Arrays.toString(arr));//[89, 90, 91]
}
}
对数组进行取值
通过下标来取值
package com.qf.test;
public class Demo8 {
public static void main(String[] args) {
int[] arr = {32, 45, 89, 12, 999, 5667};
//获取数组中的值
System.out.println(arr[0]);//32
System.out.println(arr[1]);//45
System.out.println(arr[2]);//89
System.out.println(arr[3]);//12
System.out.println("==============");
for (int i = 0; i < 4; i++) {
//i的循环的值 刚好作为数组的下标
System.out.println(arr[i]);
}
//数组.length 数组的长度
System.out.println(arr.length);// arr的长度 4
System.out.println("---------------");
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
String[] strs = {"张三", "狗蛋", "麻子", "嘻嘻"};
for (int i = 0; i < strs.length; i++) {
System.out.println(strs[i]);
}
}
}
数组可以 作为方法的参数
方法的参数 可以是哪些数据类型? 八大基本数据类型 和String
同理 数组也是可以作为方法的参数的
package com.qf.test;
import java.util.Arrays;
import java.util.Scanner;
public class Demo11 {
public static void main(String[] args) {
int[] arr2 = new int[3];//arr2 = {0,0,0};
setArr(arr2);//arr2 = {89, 90, 91}
System.out.println(Arrays.toString(arr2));//{89, 90, 91}
}
//准备对数组进行赋值
public static void setArr (int[] arr) {//arr必须是空的数组 {0,0,0}
Scanner scanner = new Scanner(System.in);
/**
* i=0 0< 3 打印 : 请输入第1数 在控制台中输入了87 ===》 scanner.nextInt()=87 执行
* arr[0] = 87 arr = {87, 0,0} i++
* i=1 1<3 打印: 请输入第2数 在控制台中输入 100 scanner.nextInt()=100
* arr[1] = 100 arr = {87,100, 0} i++
* i=2 2<3 打印: 请输入第3数 在控制台中输入 190 scanner.nextInt();=190
* arr[2] = 190 arr = {87, 100, 190}; i++
* i=3 3<3 false
*/
for (int i = 0; i < arr.length; i++) {
System.out.println("请输入第" + (i + 1) + "数");
arr[i] = scanner.nextInt();
//arr[0] = 100 arr = {100,0,0}
//arr[1] = 90 arr = {100, 90, 0}
//arr[2] = 20 arr={100, 90, 20}
}
//arr = {89, 90, 91}
}
}
数组可以作为方法的返回值
方法的返回值可以是八大基本数据类型 和String ,数组也是作为返回值的
package com.qf.test;
import java.util.Arrays;
public class Demo14 {
public static void main(String[] args) {
int[] arr = {9, 8, 7, 6};
int[] arr2 = reverse(arr);
System.out.println(Arrays.toString(arr2));
}
{1,2,3,4} => {4,3,2,1}
public static int[] reverse (int[] arr) {
int[] arr1 = new int[arr.length];//创建了一个空的数组 长度 和 arr一样的
for (int i = 0, j = arr.length - 1; i < arr.length; i++, j--) {
arr1[j] = arr[i];
}
return arr1;
}
}