java-数据结构

分支结构

1. switch

语法:
switch(变量|表达式){
case 值1:
逻辑代码1;
case 值2:
逻辑代码2;
case 值n:
逻辑代码n;
default:
未满足时的逻辑代码;
}

可判断的类型:byte、short、int、char、String(JDK7+)枚举

执行流程:
如果变量中的值等于值1,则执行逻辑代码1。
如果变量中的值等于值2,则执行逻辑代码2。
如果变量中的值等于值n,则执行逻辑代码n。
如果变量中的值没有匹配的case值时,执行default中的逻辑代码。

注意:所有case的取值不可相同。

1.default根据需要可写可不写

2.default的位置不固定

3.break根据需求是否书写,如果需要每个分支相互独立,就加上,否则不需要

1.1 用法1

switch分支结构

switch:开关

case:情况

支持的数据类型:byte short int char String(JDK7+) 枚举

需求:根据名次进行奖励

第1名:奖励夏令营一天

第2名:奖励苹果12袋

第3名:奖励笔记本一本

第4名:口头表扬一次

其他:继续加油

package com.qfedu.test1;

import java.util.Scanner;

/**
 * 	switch分支结构
 * 	switch:开关
 * 	case:情况
 * 	支持的数据类型:byte short int char String(JDK7+) 枚举
 * 
 * 	需求:根据名次进行奖励
 * 	第1名:奖励夏令营一天
 * 	第2名:奖励苹果12袋
 * 	第3名:奖励笔记本一本
 * 	第4名:口头表扬一次
 * 	其他:继续加油
 * @author WHD
 *
 */
public class Test1 {
	public static void main(String [] args) {
		Scanner input = new Scanner(System.in);
		
		System.out.println("请输入您的名次");
		
		int num = input.nextInt();
		
//		if(num == 1) {
//			System.out.println("奖励夏令营一天");
//		}else if(num == 2) {
//			System.out.println("奖励苹果12袋");
//		}else if(num == 3) {
//			System.out.println("奖励笔记本1本");
//		}else if(num == 4) {
//			System.out.println("奖励口头表扬一次");
//		}else {
//			System.out.println("继续加油");
//		}
		
		System.out.println("-----------------------------------------");
		
		switch(num) {
			
			case 1:
				System.out.println("奖励夏令营一天");
				break;
			case 2:
				System.out.println("奖励苹果12袋");
				break;
			case 3:
				System.out.println("奖励笔记本1本");
				break;
			case 4:
				System.out.println("奖励口头表扬一次");
				break;
			default:
				System.out.println("继续加油");
				break;
			
		}	
		System.out.println("程序结束");	
	}
}
1.2 用法2

switch的其他用法

需求:

前三名:都可以获得夏令营

第四名:口头表扬一次

其他:继续加油

package com.qfedu.test2;

import java.util.Scanner;

/**
 * 	switch分支结构
 * 	switch:开关
 * 	case:情况
 * 	支持的数据类型:byte short int char String(JDK7+) 枚举
 * 
 * 	switch的其他用法
 * 	需求:
 * 	前三名:都可以获得夏令营
 * 	第四名:口头表扬一次
 * 	其他:继续加油
 * @author WHD
 *
 */
public class Test1 {
	public static void main(String [] args) {
		Scanner input = new Scanner(System.in);
		
		System.out.println("请输入您的名次");
		
		int num = input.nextInt();
		
//		if(num == 1 || num == 2 || num ==  3) {
//			System.out.println("奖励夏令营一天");
//		}
		
		switch(num) {
			case 1:
			case 2:
			case 3:
				System.out.println("奖励夏令营一天");
				break;
			case 4:
				System.out.println("奖励口头表扬一次");
				break;
			default:
				System.out.println("继续加油");
				break;
			
		}
		System.out.println("程序结束");

	}
}
1.3 用法3

switch的其他类型的使用

char类型支持三种方式的赋值作为case之后的内容

package com.qfedu.test2;

import java.util.Scanner;

/**
 * 	switch分支结构
 * 	switch:开关
 * 	case:情况
 * 	支持的数据类型:byte short int char String(JDK7+) 枚举
 * 
 * 	switch的其他类型的使用
 * 	
 * @author WHD
 *
 */
public class Test2 {
	public static void main(String [] args) {
		Scanner input = new Scanner(System.in);
		
		System.out.println("请输入您的名次");
		
		int num = input.nextInt();
		
		byte b1 = (byte)num;
		
		short s1 = b1;
		
		char ch1 = (char)s1;
		
		char ch2 = 'C';
		
		String str = "E";
		
		switch(str) {
			case "A":
			case "B":
			case "C":
				System.out.println("奖励夏令营一天");
				break;
			case "D":
				System.out.println("奖励口头表扬一次");
				break;
			default:
				System.out.println("继续加油");
				break;
			
		}

		System.out.println("程序结束");
	}
}

2. 局部变量

局部变量描述
定义位置在方法体内部
作用范围离当前变量最近的大括号以内
重名问题重合的作用范围不能重名
初始值没有初始值,未赋值不能使用
存储位置(了解)基本数据类型存在栈(stack)中,引用数据类型名字在栈,值在堆(heap)
生命周期(了解)随着方法的入栈(压栈)而生效,随着方法的出栈(弹栈)而死亡
package com.qfedu.test3;
/**
 * 	局部变量
 * 	定义位置:在方法体内部
 * 	作用范围:定义行开始到所在的代码块结束。(离当前变量最近的大括号以内)
 * 	重名问题:重合的作用范围不能重名,不重合是可以重名的
 * 	初始值:未赋值不能使用
 * @author WHD
 *
 */
public class Test1 {
	
	
	public static void main(String[] args) {
		int a = 20;
		
		int b;
		
		b = 33;
		
		System.out.println(b); 
		
		System.out.println(a);
		
		String name = "赵四";
		
		if(name.equals("广坤")) {
//			int a = 55; 不能重复定义
//			int b =  66; 不能重复定义
			int c = 77;
			System.out.println(a);
			System.out.println(c);
		}else {
			int c = 88;
			System.out.println(a + b);
			System.out.println(c);
		}
	}
	
	
	
}

循环结构

循环用于处理重复的操作,提高代码的可读性,可维护性,可扩展性

1.while循环

语法:

while ( 循环条件/布尔类型表达式 ) {
循环操作
}

while:当……

循环的必要条件:任何循环都需要一下四个必不可少的条件

  • 1.计数器初始化
  • 2.判断条件
  • 3.循环体
  • 4.计数器变化

while循环可以用于处理循环次数确定和不确定的情况,通常用来处理循环次数不确定的情况

因为循环次数确定 有更简洁的循环结构实现 for

package com.qfedu.test4;
/**
 * 	使用while循环实现打印100遍好好学习
 * 
 * 	while:当……
 * 	循环的必要条件:任何循环都需要一下四个必不可少的条件
 * 	1.计数器初始化
 * 	2.判断条件
 * 	3.循环体
 * 	4.计数器变化
 * @author WHD
 *
 */
public class Test2 {
	public static void main(String[] args) {
		// 计数器初始化
		int i  = 1;
		// 判断条件
		while(i <= 10000) {
			// 循环体
			System.out.println("第"+ i +"遍好好学习");
			
			// 计数器变化
			i++;
		}
		
	}
}

使用while循环实现如下需求:

老师每天检查赵四的学习任务是否合格,如果不合格,则继续进行。

老师给赵四安排的每天的学习任务为:

上午阅读教材,学习理论部分,

下午上机编程,掌握代码部分

package com.qfedu.test4;

import java.util.Scanner;

/**
 * 	使用while循环实现如下需求:
 * 	老师每天检查赵四的学习任务是否合格,如果不合格,则继续进行。
 * 	老师给赵四安排的每天的学习任务为:
 * 	上午阅读教材,学习理论部分,
 * 	下午上机编程,掌握代码部分
 * 
 * 	while循环可以用于处理循环次数确定和不确定的情况,通常用来处理循环次数不确定的情况
 * 	因为循环次数确定 有更简洁的循环结构实现 for
 * @author WHD
 *
 */
public class Test3 {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		
		System.out.println("请输入今天的学习任务是否合格?y/n");
		
		String answer = input.next();
		
//		if(answer.equals("y")) {
//			System.out.println("恭喜你,完成任务");
//		}else {
//			System.out.println("上午阅读教材,学习理论部分");
//			System.out.println("下午上机编程,掌握代码部分");
//		}
		
		while(answer.equals("n")) {
			System.out.println("上午阅读教材,学习理论部分");
			System.out.println("下午上机编程,掌握代码部分");
			
			System.out.println("请输入今天的学习任务是否合格?y/n");
			answer = input.next();
		}
		
		System.out.println("恭喜你,完成任务");
		
	}
}

2.do-while循环

do {

​ 循环操作

} while ( 循环条件 );

do-while:做……当

do-while先执行,后判断

while和do-while的区别:

while循环是先判断,后执行,如果条件不成立,一次都不执行

do-while先执行,后判断,不管条件是否成立,至少执行一次

do-while也可以用于处理循环次数确定和不确定的情况,通常用于处理循环次数不确定的情况

因为 循环次数确定for循环更为简洁

package com.qfedu.test5;

import java.util.Scanner;

/**
 * 	do-while:做……当
 * 	do-while先执行,后判断
 * 
 * 	需求:经过几天的学习,老师给赵四一道测试题,
 * 	让他先上机编写程序完成,然后老师检查是否合格。如果不合格,则继续编写…… 
 * 
 * 	while和do-while的区别:
 * 	while循环是先判断,后执行,如果条件不成立,一次都不执行
 * 	do-while先执行,后判断,不管条件是否成立,至少执行一次
 * @author WHD
 *
 */
public class Test1 {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		String answer;
		do {
			System.out.println("编写代码完成上机测试……");
			
			System.out.println("请输入学习成绩是否合格 ?y/n");
			
			answer = input.next();
			
		}while(answer.equals("n"));
		
		System.out.println("恭喜完成任务");
	}
}	

使用do-while实现打印100遍好好学习

package com.qfedu.test5;
/**
 * 	使用do-while实现打印100遍好好学习
 * 
 * 	do-while也可以用于处理循环次数确定和不确定的情况,通常用于处理循环次数不确定的情况
 * 	因为 循环次数确定for循环更为简洁
 * @author WHD
 *
 */
public class Test2 {
	public static void main(String[] args) {
		int i  = 1;
		do {
			System.out.println("第"+ i +"遍好好学习");
			i++;
		}while(i <= 1000);
	}
}

3. for循环

for(int i=0;i<100;i++){
System.out.println(“好好学习!”);
}

执行顺序:

第一轮:

1.计数器初始化(只执行一次)

2.判断条件

3.循环体

4.计数器变换

第二轮:

直接从第2步开始

package com.qfedu.test6;

import java.util.Scanner;

/**
 * 	循环输入某同学结业考试的5门课成绩,并计算平均分
 * @author WHD
 *
 */
public class Test2 {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		
		System.out.println("请输入名字");
		
		String name = input.next();
		
		double sum = 0;
		
		for(int i = 1;i <= 5;i++) {
			System.out.println("请输入第"+ i +"门成绩");
			
			double score = input.nextDouble();
			
			sum += score;// sum = sum + score;
		}
		
		
		System.out.println(name + "的总分数是" + sum + ",平均分是:" + (sum / 5));
		input.close(); // 关闭input流
		
	}
}


4.for循环特殊写法

  • for循环常见问题1 : 缺少计数器定义(alt + enter)
package com.qfedu.test7;
/**
 * 	for循环常见问题1 : 缺少计数器定义
 * @author WHD
 *
 */
public class Test2 {
	public static void main(String[] args) {
		int i = 0;
		for(;i < 10;i++) {
			System.out.println(i);
		}
	}
}


  • for循环常见问题2 : 缺少循环条件
package com.qfedu.test7;
/**
 * 	for循环常见问题2 : 缺少循环条件
 * @author WHD
 *
 */
public class Test3 {
	public static void main(String[] args) {
		for(int i = 0;   ;i++) {
			System.out.println(i);
		}
	}
}


  • for循环常见问题3:缺少计数器变化
package com.qfedu.test7;
/**
 * 	for循环常见问题3:缺少计数器变化
 * @author WHD
 *
 */
public class Test4 {
	public static void main(String[] args) {
		for (int i = 0; i < 10; ) {
			System.out.println(i);
		}
	}
}


  • for循环常见问题4:for循环中三段代码都不写 死循环
package com.qfedu.test7;
/**
 * 	for循环常见问题4:for循环中三段代码都不写  死循环
 * @author WHD
 *
 */
public class Test5 {
	public static void main(String[] args) {
		for(;;) {
			System.out.println("hello");
		}
	}
}


5. 三种循环区别

区别2:执行顺序

while 循环:先判断,再执行

do-while循环:先执行,再判断

for循环:先判断,再执行

区别:适用情况

循环次数确定的情况,通常选用for循环

循环次数不确定的情况,通常选用while或do-while循环

循环结构

1. break

使用场景:可以用于switch或者循环中,分别表示跳出switch结构或者中断循环,没有执行完的循环次数不再执行

package com.qfedu.test1;
/**
 * 	break关键字
 * 	使用场景:可以用于switch或者循环中,分别表示跳出switch结构或者中断循环
 * 
 * 	使用for循环实现跑10圈  当跑到第8圈 太累了 跑不动了 退出
 * @author WHD
 *
 */
public class Test1 {
	public static void main(String[] args) {
		for (int i = 1; i <= 10; i++) {
			System.out.println("跑步第" + i + "圈");
			if(i == 8) {
				System.out.println("太累了,退出");
				break; // break将中断循环 所以不能将逻辑代码写在break之后
			}
		}
		
		System.out.println("程序结束");
	}
}

2.课堂练习

2.1

循环录入某学生5门课的成绩并计算平均分,如果某分数录入为负,停止录入并提示录入错误

package com.qfedu.test2;

import java.util.Scanner;

/**
 * 	循环录入某学生5门课的成绩并计算平均分,
 * 	如果某分数录入为负,停止录入并提示录入错误
 * @author WHD
 *
 */
public class Test1 {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		
		System.out.println("请输入您的名称");
		
		String name = input.next();
		double sum = 0;
		
		boolean flag = true;
		for(int i = 1;i <= 5;i++) {
			System.out.println("请输入第"+ i +"门成绩");
			double score = input.nextDouble();
			if(score < 0) {
				flag = false;
				
				System.out.println("分数录入错误,不能小于0");
				break;
			}
			sum += score;
		}
		
		if(flag) {// 判断一个布尔类型的变量是否为true  可以直接写变量 等同于 flag == true
			System.out.println(name + "平均分是" + sum / 5);
		}else {
			System.out.println("分数录入有误,不再计算平均分");
		}
		
		
		
	}
}

2.2

1~10之间的整数相加,得到累加值大于20的当前数

package com.qfedu.test2;
/**
 * 	1~10之间的整数相加,得到累加值大于20的当前数
 * @author WHD
 *
 */
public class Test2 {
	public static void main(String[] args) {
		int sum  = 0;
		for (int i = 1; i <= 10; i++) {
			sum += i;
			if(sum > 20) {
				System.out.println("累计值大于20,跳出循环");
				break;
			}
		}
		
		
		System.out.println("大于20的总和数值为:" + sum);
	}
}

3. continue

continue:继续……

continue只能用在循环中,表示跳出本次循环,继续执行下一次循环
break和continue的区别?

break可以用于switch或者循环中,continue只能用在循环中

break在循环中表示中断循环,未执行的循环次数不再执行;continue跳出本次循环,继续执行下一次循环

package com.qfedu.test3;

import java.util.Scanner;

/**
 * 	continue:继续……
 * 	continue只能用在循环中,表示跳出本次循环,继续执行下一次循环
 * 	
 * 	循环录入Java课的学生成绩,统计分数大于等于80分的学生比例
 * 
 * 	break和continue的区别?
 * 	break可以用于switch或者循环中,continue只能用在循环中
 * 	break在循环中表示中断循环,未执行的循环次数不再执行;continue跳出本次循环,继续执行下一次循环
 * @author WHD
 *
 */
public class Test1 {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		
		System.out.println("请输入班级总人数");
		
		int count = input.nextInt();
		
		double sum = 0; // 用于累计大于等于80的人数
		
		for(int i = 1;i <= count;i++) {
			System.out.println("请输入第"+ i +"人的成绩");
			int score = input.nextInt();
			
			if(score < 80) {
				System.out.println("分数小于80分,不进行累计");
				continue;
			}
			sum++;
			System.out.println("***********分数大于等于80分,进行累计***********");
		}
		
		
		System.out.println("大于等于80分的总人数是:" + sum + "占比是" + sum / count *  100 + "%");
		
		
	}
}

4. 双重循环

4.1 打印图案

当我们使用多重循环打印图案:

  • 外层循环控制行数
  • 内层循环控制列数

打印三角形:第一行元素的个数决定了计数器的初始值

  • 如果元素个数越来越多,那么就++,此时我们必须设置一个上限,也就是必须小于或者小于等于某个值
  • 如果元素个数越来越少,那么就–,此时我们必须设置一个下限,也就是必须大于或者大于等于某个值
package com.qfedu.test5;
/**
 * 	打印平行四边形
 * 
 * 	打印三角形:第一行元素的个数决定了计数器的初始值
 * 	如果元素个数越来越多,那么就++,此时我们必须设置一个上限,也就是必须小于或者小于等于某个值
 * 	如果元素个数越来越少,那么就--,此时我们必须设置一个下限,也就是必须大于或者大于等于某个值
 * @author WHD
 *
 */
public class Test3 {
	public static void main(String[] args) {
		for (int i = 1; i <= 5; i++) { // 外层循环
			// 左半部分
			for(int j =5;j >= i;j--) {
				System.out.print("&");
			}
			// 右半部分
			for(int j = 1;j <= 5;j++) {
				System.out.print("*");
			}
			// 换行
			System.out.println();
		}
	}
}

package com.qfedu.test6;
/**
 * 	使用多重循环打印正三角形
 * @author WHD
 *
 */
public class Test1 {
	public static void main(String[] args) {
		for (int i = 1; i <= 5; i++) {
			// 左半部分
			for (int j = 5; j >= i; j--) {
				System.out.print(" ");
			}
			
			// 右半部分
			for(int j = 1;j <= 2 * i -1;j++) {
				System.out.print("*");
			}
			
			// 换行
			System.out.println();
		}
	}
}

4.2 双重循环练习

打印银行菜单

package com.qfedu.test6;

import java.util.Scanner;

/**
 * 	使用switch、do-while实现银行菜单打印
 * @author WHD
 *
 */
public class Test3 {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		int choice;
		do {
			System.out.println("===========欢迎使用ATM银行系统===========");

			System.out.println("1.存款  2.取款  3.开户  4.修改密码  5.转账  6.查询  0.退出");

			choice = input.nextInt();

			switch(choice) {
			case 1:
				System.out.println("执行存款功能");
				break;
			case 2:
				System.out.println("执行取款功能");
				break;
			case 3:
				System.out.println("执行开户功能");
				break;
			case 4:
				System.out.println("执行修改密码功能");
				break;
			case 5:
				System.out.println("执行转账功能");
				break;
			case 6:
				System.out.println("执行查询余额功能");
				break;
			case 0:
				System.out.println("退出");
				break;
			default:
				System.out.println("输入错误,请重新输入");
				break;

			}
		}while(choice != 0);
		


		System.out.println("程序结束");


	}
}

打印乘法表

package com.qfedu.test6;
/**
 * 	使用双重循环打印乘法表
 * @author WHD
 *
 */
public class Test2 {
	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 + "\t");
			}
			
			System.out.println();
		}
	}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值