1 do...while循环
格式
初始化语句;do{
循环体语句;
控制条件语句;
}while(判断条件语句);
流程:
先执行初始化语句
再执行循环体语句
再执行条件控制语句
再做条件的判断:true, 继续执行循环体和条件控制false循环结束
特点:
循环体语句至少执行一次
案例
1. 使用do...while 求1-100内的奇数和以及偶数和
packagecom._51doit.javase.day04.loop;public classDoWhile {public static voidmain(String[] args) {int i=1;int sum1 = 0;int sum2 = 0;do{//System.out.println("我是你爹");
if(i%2==0) {
sum1+=i;
}else{
sum2+=i;
}
i++;
}while (i<=100);
System.out.println("偶数个数为:"+sum1);
System.out.println("奇数个数为:"+sum2);
}
}
1.1 循环综合案例
贪吃蛇:
需求: 在键盘上输入一个数,如果是1,代表蛇吃食物,得分加10,并继续输入,如果输入的是一个非1的数字,停止程序,输出得分
packagecom._51doit.javase.day04.loop;importjava.util.Scanner;public classSnake {public static voidmain(String[] args) {
System.out.println("欢迎来到贪吃蛇");
System.out.println("请输入一个数字:");int score = 0;
Scanner sc= newScanner(System.in);int num =sc.nextInt();while(num == 1) {
score+= 10;
num= sc.nextInt(); //对num重新赋值
}
System.out.println("您的得分是:"+score);
}
}
1.2 循环登录练习
需求:1 控制台提示用户输入密码;2用户输入密码;3如果用户输入的密码不等于1234,回到步骤1;4如果用户输入的密码等于1234,提示登录成功
分析:
需要用到Scanner
循环: 执行多少次: 不确定: while
循环的条件: 用户输入的密码不等于1234
循环体: 提示用户输入密码,用户输入密码
packagecom._51doit.javase.day04.loop;importjava.util.Scanner;public classLoginDemo {public static voidmain(String[] args) {
System.out.println("请输入您的密码");
Scanner sc= newScanner(System.in);int password =sc.nextInt();while(password != 1234) {
System.out.println("密码不正确,请重新输入密码");
password=sc.nextInt();
}
System.out.println("登录成功");
}
}
将此案例用do...while形式来做
1 packagecom._51doit.javase.day04.loop;2
3 importjava.util.Scanner;4
5 public classLoginDemo {6 public static voidmain(String[] args) {7 Scanner sc = newScanner(System.in);8 do{9 System.out.println("请输入您的密码:");10 int password =sc.nextInt();11 }while(password != 1234);12 }13 }
注意,上面代码第十一行会出问题,第10行中的password作用域为do{}中,所以第11行的while就相当于没定义,无法使用,解决方法是将变量进行声明,代码如下
1 packagecom._51doit.javase.day04.loop;2
3 importjava.util.Scanner;4
5 public classLoginDemo {6 public static voidmain(String[] args) {7 Scanner sc = newScanner(System.in);8 intpassword; //变量的声明,局部变量不赋初值不能使用9 do{10 System.out.println("请输入您的密码:");11 password =sc.nextInt();12 }while(password != 1234);13 System.out.println("登录成功");14 }15 }
1.3 上诉代码将密码改写成字符串
字符串在比较内容的时候是不能使用 “==”,“!=”的
字符串在比较内容的时候,用的是equals
用法: 字符串a.equals(字符串b);如果内容相同则返回true,否则返回false,当在前面加个"!"表示不相等
1 packagecom._51doit.javase.day04.loop;2
3 importjava.util.Scanner;4
5 public classLoginDemo {6 public static voidmain(String[] args) {7 Scanner sc = newScanner(System.in);8 String password;9 do{10 System.out.println("请输入您的密码:");11 password =sc.nextLine();12 }while(!"1234".equals(password)); //这里将“1234”放前面13 System.out.println("登录成功");14 }15 }
1.4 do you love me
需求:
问老婆一个问题: 你爱我么?如果回答的不是爱,继续问, 如果回答的是爱, 循环结束
packagecom._51doit.javase.day04.loop;importjava.util.Scanner;public classDoYouLoveMe {public static voidmain(String[] args) {
Scanner sc= newScanner(System.in);
String answer;do{
System.out.println("老婆,你爱我吗");
answer=sc.nextLine();
}while(!"爱".equals(answer));
System.out.println("哈哈");
}
}
1.5 循环嵌套
在循环中继续使用循环
案例:
1.请输出一个4行5列的星星(*)图案
/*** 循环的嵌套:
* 循环中还有循环 两层嵌套
* 外层循环控制行
* 内层循环控制列
* 列不换行
* 内层循环结束后,再换行*/
packagecom._51doit.javase.day04.loop;public classCircleDemo {public static voidmain(String[] args) {for(int i=1; i<=4;i++) {for(int j=1;j<=5;j++) {
System.out.print("*");
}
System.out.println();
}
}
}
2.99乘法表的打印
packagecom._51doit.javase.day04.loop;public classMultiTable {public static voidmain(String[] args) {for(int i=1; i<=9; i++) {for(int j=1; j<=i; j++) {
System.out.print(i+"X"+j+"="+i*j+"\t");
}
System.out.println();
}
}
}
知识点:
tab: \t
换行: \n
回车:\r
1.6 跳转控制语句
break: 结束单层循环(其所在的那层循环结束),在循环语句和switch语句中使用
continue:结束本次循环,在循环语句中使用
return:结束整个方法,返回结果给其调用者
2. 方法:
2.1 方法的定义:
目的:解决代码重复编写问题:
格式:
修饰符 返回值类型 方法名(参数类型参数名1,参数类型参数名2…) {
函数体;
return 返回值;
}
方法格式的解释说明:
修饰符:比较多,后面会详细介绍。目前就用public static
返回值类型: 用于限制返回值的数据类型
方法名: 一个名称,为了方便我们调用参数
参数类型:限定调用方法时传入参数的数据类型
参数名:是一个变量,接收调用方法时传入的参数
函数体: 完成功能的代码
return:结束方法以及返回方法指定类型的值
返回值: 程序被return带回来的结果,返回给调用者。
2.2 方法的调用
方法名(符合参数类型和个数的具体值)
练习:
packagecom._51doit.javase.day04.loop;public classMethodTest {public static voidmain(String[] args) {
printCha(12.5,34);
printAreaAndZHOfCircle(12);
printStar(8,10);
}public static void printCha(double a,doubleb) {
System.out.println(a-b);
}public static void printAreaAndZHOfCircle(doubler) {
System.out.println("圆的周长为:"+2*3.14*r);
System.out.println("圆的面积为:"+3.14*r*r);
}public static void printStar(int x,inty) {for(int i=1;i<=x;i++) {for(int j=1;j<=y;j++) {
System.out.print("*");
}
System.out.println();
}
}
}
2.3 方法的返回值
无返回值的方法:
返回值类型:void
有返回值的方法:
返回值类型: 数据类型
必须return
return 后面的值要和返回值类型相一致
案例
packagecom._51doit.javase.day04.loop;public classMethodTest {public static voidmain(String[] args) {boolean re = isDouble(13);
System.out.println(re);
System.out.println(getCha(12.3,34));//只有有返回值的方法可以直接打印
System.out.println(getMax(12.4f,12,34));
}public static boolean isDouble(inta) {return a%2==0;
}public static double getCha(double x,doubley) {return x-y;
}public static float getMax(float a,float b,floatc) {if(a>b&a>c) {returna;
}else if(b>c) {returnb;
}else{returnc;
}
}
}
2.4 方法的重载
概念:一个类中可以存在多个名字相同的方法,但是必须保证参数的个数或类型不同,其与返回值无关
TODO:在代码里充当书签,便于定位
案例
1 packagecom._51doit.javase.day04.loop;2
3 public classReloadMethod {4 public static voidmain(String[] args) {5 System.out.println(getSum(1,2));6
7 }8 public static long getSum(long a, longb) {9 System.out.println("long......");10 return a+b;11 }12 public static long getSum(int a, intb) {13 System.out.println("int......");14 return a+b;15 }16 }
打印结果为
int。。。。。。
3
可见一个函数存在相同的方法时,其会根据参数的类型去匹配应该调用哪一个函数
变化1:若将12行代码中的两个int改为short,运行结果会是什么呢?
public static long getSum(short a, short b){
得到的结果 long......
3
这说明函数调用时,若发现参数类型不完全匹配时,就会找一个能接受给定参数的函数调用,如本例中给定的参数时int类型,但两个getSum()方法中参数都不为int,但long可以接受int类型参数,short不可以接收int类型参数,所以调用参数类型为long的getSum()方法。
变化2:
若将第8行和11行代码分别改写成如下形式,运行结果会怎样
1 public static long getSum(int a, longb) { //第8行2
3
4 public static long getSum(long a, int b) { 第12行
这样会报错,main()方法将不知道要调用哪一个getSum方法,报错信息如下: