Java复习总结三(详细,干货)

上接: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个问题:

  1. 数组索引越界异常
    ArrayIndexOutofBoundsException,访问了不存在的索 引时,就会出现此异常。
  2. 空指针异常 :
    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);

一句话搞定,写的好棒,つ﹏⊂
我以为我基础还是不错的,莫得想到。。
嗯。。加油。。。努力。。。努力
这一篇先写到这里,下一篇见。

  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鹈鹕吃吃吃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值