上接:Java复习总结二
循环有三种:for,while,do…while。
for循环
for循环时最常用的一种循环,常用于循环次数已知的情况下。
练习:求1到100偶数和,打印水仙花数
格式
for(初始化语句;判断条件语句;控制条件语句){
循环体语句;
}
执行流程:
1、执行初始化语句
2、执行判断条件语句
如果这里是true,就继续
如果这里是false,循环就结束
3、执行循环体语句
4、执行控制条件语句
5、回到b
注意事项:
1、判断条件语句无论简单还是复杂,结果是boolean类型。
2、循环体语句如果是一条,可以省略大括号,但是不建议。
3、有分号就没有左大括号,有左大括号就没有分号。
4、使用逗号操作符,可以在for循环中定义多个变量,但是它们必须是相同的类型。
5、在一个控制表达式中定义多个变量这种能力只限于for循环使用,在其他选择或迭代语句中都不能使用这种方式。
案例:求1到100偶数和
public class Demo {
public static void main(String[] args) {
int sum = 0;
for (int i = 0; i <= 100; i++) {
// 对二取余等于0则为偶数
if (i % 2 == 0) {
sum += i;
}
}
System.out.println(sum);
}
}
案例:水仙花数
// 水仙花数就是它各个位上的数值的立方相加之和等于那哪个三位数
public class Demo {
public static void main(String[] args) {
// 遍历100到1000的所有水仙花数
for(int i=100; i<1000; i++) {
//在计算之前获取三位数中每个位上的值
int ge = i%10;
int shi = i/10%10;
int bai = i/100%10;
// 判定条件三位数的各个位的立方之和等不等于本身
if(ge*ge*ge + shi*shi*shi + bai*bai*bai == i) {
// 水仙花数
System.out.println(i);
}
}
}
}
while循环
while循环常用于不确定循环次数的循环
基本格式:
while(判断条件语句) {
循环体语句;
}
扩展格式:
初始化语句;
while(判断条件语句){
循环体语句;
控制条件语句;
}
执行流程:
在循环开始时,会计算一从判断条件语句,结果为true就一直循环下去。
1、for和while的区别
a:使用上的区别
for语句的那个控制条件变量,在循环结束后不能在使用了。
而while的可以继续使用。
b:理解上的区别
for适合于一个范围的判断
while适合次数不明确的
注意:为了避免无限死循环,一定要定义退出判断语句,或这是达到什么目的后退出。
案例:一张纸折叠多少次能达到珠穆朗玛峰的高度
public class Demo {
public static void main(String[] args) {
//定义一个计数器,初始值为0
int count = 0;
//定义纸张厚度
double houdu = 0.1;
//定义珠穆朗玛峰的高度
int gaodu = 8844430;
//因为要反复折叠,所以要使用循环,但是不知道折叠多少次,这种情况下更适合使用while循环
while (houdu <= gaodu) {
// 每折纸一次,都是之前厚度的2倍
houdu *= 2;
// 每循环一次,折叠次数+1
count++;
}
//打印计数器的值
System.out.println("需要折叠:" + count + "次");
}
}
do-while
基本格式
do {
循环体语句;
}while(判断条件语句);
扩展格式:
初始化语句;
do {
循环体语句;
控制条件语句;
}while(判断条件语句);
通过查看格式,我们就可以看出其实三种循环的格式可以是统一的。
三种循环的区别:
a:do...while循环至少执行一次循环体
b:for和while必须先判断条件是否是true,然后后才能决定是否执行循环体
控制跳转语句
break:强行中断,不执行剩余的语句
用在循环和switch语句中,离开此应用场景无意义。
作用:
1、跳出单层循环
2、跳出多层循环,需要标签语句的配合
continue:跳过本次循环进入下一次循环。
1、用在循环中,离开此应用场景无意义。
2、作用
跳出单层循环的一次,可以继续下一次
案例:打印99乘法表
public class Demo {
public static void main(String[] args) {
for(int i = 1; i <= 9; i++){
for(int j = 1; j <= i; j++){
System.out.print(j + "*" + i + "=" + (i * j) + " ");
}
System.out.println();
}
}
}
数组
数组只是相同类型的,用一个标识符名称封装到一起的一个对象序列或基本类型数据序列。
数组通过[]来定义使用的,要定义一个数组,只需要在类型名后面加一对空的方括号即可[]。当然方括号也可以放在标识符的后面,格式如下:
1、数组:存储同一种数据类型的多个元素的容器。
2、特点:每一个元素都有编号,从0开始,最大编号是长度-1。
编号的专业叫法:索引
3、定义格式
数据类型[] 数组名;
数据类型 数组名[];
注意:上面这两种格式的含义是一样的,第二种比较符合c和c++程序员的习惯。
不过第一种格式获取比较合理,因为它表明类型是一个int类型的数组。
4、数组的初始化
动态初始化
只给长度,系统给出默认值
举例:int[] arr = new int[3];
静态初始化
给出值,系统决定长度
举例:int[] arr = new int[]{1,2,3};
简化版:int[] arr = {1,2,3};
注意:
1、在使用数组之前,数组必须先要进行正确的初始化,否则编译器不允许它做任何事情。
2、当我们明确数组中要存储的值时,使用静态初始化,反之,使用动态初始化。
3、静态初始化中,要存储的数值要使用逗号分隔。
数组中经常出现的2个问题:
- 数组索引越界异常
ArrayIndexOutofBoundsException,访问了不存在的索 引时,就会出现此异常。 - 空指针异常 :
NullPointerException:当一个变量不再记录地址值的 时候,,还想去访问堆内存的数据。
null:空值,引用数据类型的默认值,表示不指向任何有效对象。
常见的排序方法:冒泡排序,选择排序,快速排序。。。。等
之前写的:冒泡排序
案例:简单的遍历
public static void main(String[] args) {
int[] arr = {5,2,9,7,11};
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
案例:获取最小值,最大值同理
public class Demo {
public static void main(String[] args) {
double[] arr = {12.9, 53.54, 75.0, 99.1, 3.14};
// 首先假设数组中的第一个索引中的数是最小的
double min=arr[0];
for (int i = 1; i < arr.length; i++) {
// 如果这个min比后面的大,则把那个小的赋值给min
if(min>arr[i]){
min = arr[i];
}
}
// 最后输出最小值
System.out.println("最小的数是:"+min);
}
}
之前碰到了一个题:定义一个长度为5的整数数组,数组中每个元素都是0到9之间的整数,从数组的最大索引位置开始到最小索引位置,依次表示整数的个位、十位、百位。。。依次类推。请编写程序计算,这个数组所表示的整数值。
我自己就看着题解了一下:
public class Demo {
public static void main(String[] args) {
int[] arr = {2, 4, 6, 8, 2};
// 开始没什么思路,就全列出来找了找规律
/*int a = arr[0] * 10000;
int b = arr[1] * 1000;
int c = arr[2] * 100;
int d = arr[3] * 10;
int e = arr[4];*/
int sum = 0;
int a = 100000;
for (int i = 0; i < arr.length; i++) {
// 每次循环除10然后类加,最后结果就是那个数
a = (a / 10);
sum += arr[i] * a;
}
System.out.println(sum);
}
}
虽然写的复杂了点,但是问题解决了,然后我就去看了些标准答案如下:
int[] arr = {2, 3, 5, 9, 4};
// 定义变量存储最终的整数
int num = 0;
// 对数组进行遍历
for (int i = 0; i < arr.length; i++) {
// 计算,高位乘以10再加上当前位的值
num = num * 10 + arr[i];
}
System.out.println(num);
一句话搞定,写的好棒,つ﹏⊂
我以为我基础还是不错的,莫得想到。。
嗯。。加油。。。努力。。。努力
这一篇先写到这里,下一篇见。