每日学习总结:局部变量、成员变量、嵌套for循环、方法(Day04)
1 变量
1.1 概念
一般通过“变量类型 变量名 = 变量值 ;”这三部分来描述一个变量。如:int a = 3 ;
变量的使用原则:就近原则,即尽量控制变量的使用范围到最小。
1.2 局部变量
位置: 定义在方法里或者局部代码块中
注意: 必须手动初始化/赋值来分配内存.如:int i = 5;或者int i; i = 5;
作用域: 也就是方法里或者局部代码块中,方法运行完内存就释放了
注意事项:变量的使用原则,成员变量与局部变量同名时,使用近的局部变量
1.2 成员变量
位置: 定义在类里方法外
注意: 不用初始化,也会自动被初始化成默认值
作用域: 整个类中,类消失了,变量才会释放
public class TestVariable2 {
/** 本类测试成员变量与局部变量 */
/** 创建成员变量
* 1.位置:类里方法外
* 2.注意:无需手动初始化,会自动赋予对应类型的默认值
* 3.作用域:在整类里都生效,类消失,变量才消失
* */
int count;
static int sum;
public static void main(String[] args) {
/**创建局部变量,
* 1.位置:方法里/局部代码块里
* 2.注意:使用时必须手动初始化
* 3.作用域:当方法里/局部代码块执行完毕,变量就释放
* */
int sum = 100;
System.out.println(sum);
TestVariable2 test2 = new TestVariable2();
System.out.println(test2.count);
/**变量:变量的使用原则,就近原则,当成员变量与局部变量同名时,使用局部变量*/
System.out.println(sum);
}
}
默认值:
| 基本类型 |
默认值 |
| boolean |
false |
| char |
‘\u0000’ (null) |
| byte |
(byte)0 |
| short |
(short)0 |
| int |
0 |
| long |
0L |
| float |
0.0f |
| double |
0.0d |
public class TestVariable1 {
/** 本类用于测试各种类型变量的默认值 */
//定义各种类型的成员变量,测试变量的默认值
byte b;
short s;
int i;
long l;
float f;
char a;
double d;
boolean t;
String x;
public static void main(String[] args) {
TestVariable1 test = new TestVariable1();
System.out.println(test.b);
System.out.println(test.s);
System.out.println(test.i);
System.out.println(test.l);
System.out.println(test.f);
System.out.println(test.d);
System.out.println(test.a);
System.out.println(test.t);
System.out.println(test.x);
}
}
2 嵌套for循环
2.1 概述
存在至少2层for循环,根据外层的条件,判断里层能否执行
如果能执行,就把里层代码都循环完毕后,再继续判断是否执行外层循环的下一次循环
2.2 嵌套for循环的形式
2.2.1 练习:嵌套for循环,入门案例
总结1:外循环执行1次,内循环执行多次
总结2:外循环控制行,内循环控制列
public class TestForDemo {
/** 本类用于测试嵌套for循环的入门案例 */
public static void main(String[] args) {
/** 外层执行一次,内层执行多次
* 外层控制的是轮数,内存控制的是每轮执行的次数
* */
for(int i = 1; i<=3; i++){ //内存循环
System.out.println("外层循环第:"+i+"轮");
for (int j = 1; j<=5 ;j++){ //外层循环
System.out.println("内层循环第第:"+j+"次");
}
}
System.out.println("···································");
/** 打印一个由 * 组成的矩形 */
for(int i = 1; i<=3; i++){ //内存循环
for (int j = 1; j<=5 ;j++){ //外层循环
System.out.print("*");
}
System.out.println(); //空白行用来换行
}
}
}
2.2.2 练习2:打印直角三角形
public class TestForTriangles {
/** 利用for循环打印一个左直角三角形
*
* *
* **
* ***
* ****
* *****
* ******
* */
public static void main(String[] args) {
for (int i = 1; i<=6;i++){
/** 此处列数要随着行数而变化,列数最大值就是行数 */
for(int j = 1 ; j<=i;j++){
System.out.print("*");//在同一轮/同一行打印不换行
}
System.out.println();//空白行用来换行
}
}
}
2.2.3 练习:打印99乘法表
public class TestFor99Excel {
/** 打印99乘法表 */
public static void main(String[] args) {
for (int i = 1;i<=9;i++){ //控制行数,打印9行
for (int j= 1; j<=i;j++){ //控制列数,i行打印i列
//拼接打印算式,后面拼接一个"\t"表示这是表格格式,\t也被称作制表符
System.out.print(j+"*"+i+"="+(j*i)+"\t");
}
System.out.println( );
}
}
}
3 break与continue
3.1 概念
break: 直接结束当前循环,跳出循环体,简单粗暴
break以后的循环体中的语句不会继续执行,循环体外的会执行
注意如果是嵌套for循环,在内层循环遇到了break,只会跳出当前这一层内循环哦
continue: 跳出本轮循环,继续下一轮循环
continue后本轮循环体中的语句不会继续执行,但是会继续执行下轮循环,循环体外的也会执行
3.2 练习:测试Break与Continue
import java.util.Scanner;
/**需求:找数字88
* 提示并接受用户输入100次数字,如果不是88,则继续输入,找到88就结束*/
public class TestBreakAndContinue {
public static void main(String[] args) {
//循环体可以帮助我们执行重复的事情,控制for循环执行100次
for(int i = 1;i <= 100; i++) {
//在每一次循环中都要提示并接收用户输入的数字
System.out.println("请输入数字:");
int input = new Scanner(System.in).nextInt();
if(input != 88) {//用户输入的不是88
continue;//直接继续输入
/**注意,不管是不是加continue,都可以在猜不对的情况下继续输入
* 只不过加了continue后效率更高,只要数据不等于88,就无需执行后面的代码
* 直接进行下一轮的猜数字即可* */
/**break或者continue之后都不允许写代码,都是不可到达的代码*/
//System.out.println(0);//Unreachable code
}
System.out.println("我是用来测试continue有没有跳过循环后半部分代码的哦");
if(input == 88) {//找到88了
System.out.println("恭喜您,猜对了!");
break;//结束程序
//System.out.println(0);//Unreachable code
}
}
}
}
4 循环结构2 : while
4.1 形式(先判断,再执行)
4 循环结构3 : do-while
4.2形式(先执行,再判断,循环体代码保证最少执行一次)
4.3 练习:猜数字之while与do-while练习
import java.util.Random;
import java.util.Scanner;
/**
* 本类用于练习while循环
* 需求: 产生一个随机数,和用户一直在输入的数字做比较,直到用户猜对
* */
public class TestWhile {
public static void main(String[] args) {
int r = createNum();//调用可以生成随机数的方法,并且接收生成的随机数
System.out.println("打个小抄:"+r);
//调用猜数字方法1--while
//guessNum1(r);
//调用猜数字方法2--do-while
guessNum2(r);
}
public static void guessNum2(int r) {
do {//先执行一次
//2.接收用户输入的值
System.out.println("猜猜看~");
int input = new Scanner(System.in).nextInt();
//3.判断是否猜对(拿用户猜的数字与生成的随机数做比较)
if(input > r) {
System.out.println("猜大了,继续猜猜看");
}else if(input < r) {
System.out.println("猜小了,继续努力");
}else if(input == r) {
System.out.println("猜对了!");
//一定注意:要设置程序出口!!!
break;
}
}while(true);
}
//创建猜数字的方法
public static void guessNum1(int r) {
//1.写一个死循环
while(true) {//死循环--需要设置程序的出口
//2.接收用户输入的值
System.out.println("猜猜看~");
int input = new Scanner(System.in).nextInt();
//3.判断是否猜对(拿用户猜的数字与生成的随机数做比较)
if(input > r) {
System.out.println("猜大了,继续猜猜看");
}else if(input < r) {
System.out.println("猜小了,继续努力");
}else if(input == r) {
System.out.println("猜对了!");
//一定注意:要设置程序出口!!!
break;
}
}
}
//创建一个用来生成随机数的方法
public static int createNum() {
//让程序产生一个随机数
//java.util.Random,注意导包,快捷键:Ctrl+Shift+O
int random = new Random().nextInt(100);//参数100是自定义的,此时生成的随机数范围是[0,100)的整数
return random;
}
}
4.4 拓展:三种循环的区别
- for:知道循环次数
- while/do while:当循环次数不确定时
- while:先判断,不符合规则,不执行代码
- do while:代码最少被执行一次,再去判断,符合规则,再次执行代码
- 循环之间都可以互相替代,但是一般最好选择合适的循环结构来完成代码哦~
5 方法
5.1 概述
被命名的代码块,方法可以含参数可以不含参数,可以提高代码的复用性。
5.2 方法定义的格式
5.3 方法调用顺序图
顺序执行代码,调用指定方法,执行完毕,返回调用位置
5.4 练习:测试方法的调用顺序/参数/返回值
public class TestMethod {
//1.创建程序的入口函数main()
public static void main(String[] args) {
System.out.println(1);
/**2.我们通过方法名+参数列表的方式来调用方法的功能*/
method1();//调用method1()
System.out.println(2);
method2(3);//调用method2()
int result = method3(1,2);//调用method3()
System.out.println(result);
}
/**3.如果方法想要返回值,必须修改返回值类型
* 并且return对应类型的结果
* 如果方法的返回值类型是void,不允许有返回值
* */
/*本方法用来测试方法的返回值类型*/
public static int method3(int i, int j) {
/**4.通过return关键字将方法结果返回到调用位置*/
return i+j;
}
/**1.方法的修饰符 方法的返回值类型 方法名(方法参数){方法体}*/
/*method1()想测试方法的调用顺序*/
public static void method1() {
System.out.println(5);
System.out.println(6);
System.out.println(7);
}
/*本方法用来测试方法的参数,参数的位置在小括号里*/
public static void method2(int a) {
System.out.println("海绵宝宝今年:"+ a +"岁啦~");
}
}




