1.局部变量
局部变量 | 描述 |
---|---|
赋值 | 必须先赋值才能使用 |
定义位置 | 定义在方法内部 |
作用范围 | 离当前变量最近的大括号以内 |
重名 | 重合的作用范围不能重名 |
生命周期 | 随着方法的入栈而生效,随着方法的出栈而死亡 |
存储位置 | 基本数据类型:变量和值都存在栈中;引用数据类型:栈中存放变量名(引用)堆中存方法值 |
2.堆(heap)和栈(stack)
栈:先进先出 FILO first in last out
堆:先进先出 FIFO first in first out
3.循环
3.1 while循环
while:当……
循环必要条件:
1.计数器初始化
2.判断条件
3.循环体
4.计数器变化
while循环特点:while循环可以处理循环次数确定的情况,更擅长处理循环次数不确定的情况,如果条件不成立,一次都不会执行。
public class Test2 {
public static void main(String[] args) {
int i = 1; // 1.计数器初始化
while(i <= 100) { // 2.条件判断
System.out.println("第" + i + "遍打印好好学习" ); // 3.循环体
i++;// 4.计数器变化
}
System.out.println("程序结束");
}
}
/**
* 老师每天检查赵四的学习任务是否合格,如果不合格,则继续进行。
* 老师给赵四安排的每天的学习任务为:
* 上午阅读教材,学习理论部分,
* 下午上机编程,掌握代码部分
*
* while循环可以处理循环次数确定的情况
* 更擅长处理循环次数不确定的情况
* 如果条件不成立 一次都不会执行
* @author WHD
*
*/
public class Test1 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入您的学习任务是否合格?y/n");
String answer = input.next();
while(answer.equals("n")) {
System.out.println("上午阅读教材");
System.out.println("下午敲代码");
System.out.println("请输入您的学习任务是否合格?y/n");
answer = input.next();
}
// if(answer.equals("n")) {
// System.out.println("上午阅读教材");
// System.out.println("下午敲代码");
// }else {
// System.out.println("恭喜完成");
// }
System.out.println("恭喜完成");
System.out.println("程序结束");
}
}
3.2 do-while
先执行,后判断,不管条件是否成立,至少执行一次
while和do-while的区别?
while先判断后执行,如果条件不成立,一次都不执行
do-while先执行后判断,不管条件是否成立,至少执行一次
do-while更擅长处理循环次数不确定的情况
import java.util.Scanner;
/**
* do-while 先执行 后判断 不管条件是否成立 至少执行一次
* 经过几天的学习,老师给赵四一道测试题,
* 让他先上机编写程序完成,然后老师检查是否合格。
* 如果不合格,则继续编写……
* @author WHD
*
*/
public class Test2 {
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"));
// if(answer.equals("n")) {
// System.out.println("继续编写代码");
// }else {
// System.out.println("恭喜完成");
// }
System.out.println("恭喜完成");
System.out.println("程序结束");
}
}
/**
* 使用do-while实现N遍好好学习
* @author WHD
*
*/
public class Test3 {
public static void main(String[] args) {
int i = 1;
do {
System.out.println("第"+ i +"遍好好学习");
i++;
}while(i <= 100);
}
}
3.3 for循环
for循环只能用于处理循环次数确定的情况,书写比while或者do-while更加简洁
for循环执行顺序
第一轮:
1.计数器初始化,并且只执行一次
2.条件判断
3.循环体
4.计数器变化
第二轮:
直接从判断条件开始继续执行
import java.util.Scanner;
/**
* 循环输入某同学结业考试的5门课成绩,并计算平均分
* @author WHD
*
*/
public class Test2 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
double sum = 0; // 定义一个变量用于计算总分
for(int i = 1;i <= 5;i++) {
System.out.println("请输入第"+ i +"门成绩");
double score = input.nextDouble(); // 每次接收并且存储到score中
sum += score; // 每次将score累计到sum中
}
System.out.println("平均分是" + sum / 5);
}
}
import java.util.Scanner;
/**
* 根据用户输入的数字打印加法表
* @author WHD
*
*/
public class Test1 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入一个数字");
int num = input.nextInt();
for(int i = 0 ;i <= num;i++) {
System.out.println(i + "+" + (num - i) + "=" + num);
}
}
}
4.break关键字
使用break中断循环
break适用场景:
在switch中表示跳出switch结构
在循环中表示中断当前循环,没有执行完的次数不再执行
/**
* 使用break中断循环 模拟跑步停止
* break
* 适用场景:
* switch 表示跳出switch结构
* 循环 表示中断当前循环 没有执行完的次数 不再执行
* @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;
}
}
System.out.println("程序结束");
}
}
import java.util.Scanner;
/**
* 循环录入某学生5门课的成绩并计算平均分,
* 如果某分数录入为负,停止录入并提示录入错误
* @author WHD
*
*/
public class Test2 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
for(int i = 1;i <= 5;i++) {
System.out.println("请输入第"+ i +"门成绩");
int score = input.nextInt();
if(score < 0) {
System.out.println("分数录入不正确!");
break;
}
}
System.out.println("程序结束");
}
}
5.continue关键字
continue 继续
只能用于循环中,表示跳出本次循环,继续执行下一次循环
break和continue的区别:
1.break可以用于switch或者循环,continue只能用于循环
2.break在循环中表示中断循环,没有执行完的次数不再执行,continue表示跳出本次循环,继续执行下一次
import java.util.Scanner;
/**
* continue 继续
* 只能用于循环中 表示跳出本次循环 继续执行下一次循环
* 统计分数大于80的学生人数占比
*
*
* break和continue区别
* 应用场景区别:
* 1.break可以用于switch或者循环 continue只能用于循环
* 2.break在循环中表示中断循环 没有执行完的次数不再执行 continue表示跳出本次循环 继续执行下一次
* @author WHD
*
*/
public class Test2 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入有几个人");
int num = input.nextInt();
double count = 0;
for(int i =1;i <= num;i++) {
System.out.println("请输入第"+ i +"个人的成绩");
int score = input.nextInt();
if(score < 80) {
continue;
}
count ++;
}
System.out.println(count / num * 100 + "%");
}
}
/**
* 求1~10之间的所有偶数和
* @author WHD
*
*/
public class Test3 {
public static void main(String[] args) {
int sum = 0;
for(int i = 1;i <= 10;i++) {
if(i % 2 != 0) {
continue;
}
sum += i;
}
System.out.println(sum);
int sum1 = 0;
int i = 1;
while(i <= 10) {
i++;
if(i % 2 != 0) {
continue;
}
sum1 += i;
}
System.out.println(sum1);
int sum2 = 0;
int j = 1;
do {
j++;
if(j % 2 != 0) {
continue;
}
sum2 += j;
}while(j <= 10);
System.out.println(sum2);
}
}
6. debug调试
7. 多重循环
7.1 打印图案
完成循环变量变化一次,内层循环变量变化一轮
1.外层循环控制行数
2.内层循环控制列数
3.第一行的个数决定了计数器的初始值
4.数量
越来越多 ++ 必须设定一个上限,也就是计数器必须小于或者小于等于某个值
越来越少 -- 必须设置一个下限,也就是计数器必须大于或者大于等于某个值
/**
* 使用多重循环打印复杂的图案
* 1.外层循环控制行数
* 2.内层循环控制列数
* 3.第一行的个数决定了计数器的初始值
* 4.数量
* 越来越多 ++ 必须设定一个上限 也就是计数器必须小于 或者 小于等于某个值
* 越来越少 -- 必须设定一个下限 也就是计数器必须大于 或者 大于等于某个值
* @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();
}
}
}
/**
* 使用多重循环打印正三角形
* 分析:
* 左半部分 倒三角
* 右半部分 直角三角形
*
* 1.外层循环控制行数
* 2.内层循环控制列数
* 3.第一行的个数决定了计数器的初始值
* 4.数量
* 越来越多 ++ 必须设定一个上限 也就是计数器必须小于 或者 小于等于某个值
* 越来越少 -- 必须设定一个下限 也就是计数器必须大于 或者 大于等于某个值
* @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(" ");
}
// 右半部分 直角三角形
// 直角三角形列数 规律 每一行的个数是行号 * 2 -1
for(int j = 1;j <= 2 * i - 1;j++) {
System.out.print("*");
}
// 换行
System.out.println();
}
}
}