1  do...while循环

格式

初始化语句;
do {
循环体语句;
控制条件语句;
}while(判断条件语句);
流程:
先执行初始化语句
再执行循环体语句
再执行条件控制语句
再做条件的判断:
true, 继续执行循环体和条件控制
false 循环结束
特点:
循环体语句至少执行一次

案例

1. 使用do...while  求1-100内的奇数和以及偶数和

package com._51doit.javase.day04.loop;

public class DoWhile {
public static void main(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的数字,停止程序,输出得分

package com._51doit.javase.day04.loop;

import java.util.Scanner;

public class Snake {
public static void main(String[] args) {
System.out.println("欢迎来到贪吃蛇");
System.out.println("请输入一个数字:");
int score = 0;
Scanner sc = new Scanner(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
循环体: 提示用户输入密码,用户输入密码

package com._51doit.javase.day04.loop;

import java.util.Scanner;

public class LoginDemo {
public static void main(String[] args) {
System.out.println("请输入您的密码");
Scanner sc = new Scanner(System.in);
int password = sc.nextInt();
while(password != 1234) {
System.out.println("密码不正确,请重新输入密码");
password = sc.nextInt();
}
System.out.println("登录成功");
}
}

将此案例用do...while形式来做

 1 package com._51doit.javase.day04.loop;
2
3 import java.util.Scanner;
4
5 public class LoginDemo {
6 public static void main(String[] args) {
7 Scanner sc = new Scanner(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 package com._51doit.javase.day04.loop;
2
3 import java.util.Scanner;
4
5 public class LoginDemo {
6 public static void main(String[] args) {
7 Scanner sc = new Scanner(System.in);
8 int password; //变量的声明,局部变量不赋初值不能使用
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 package com._51doit.javase.day04.loop;
2
3 import java.util.Scanner;
4
5 public class LoginDemo {
6 public static void main(String[] args) {
7 Scanner sc = new Scanner(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

需求:
问老婆一个问题: 你爱我么?如果回答的不是爱,继续问, 如果回答的是爱, 循环结束

package com._51doit.javase.day04.loop;

import java.util.Scanner;

public class DoYouLoveMe {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String answer;
do {
System.out.println("老婆,你爱我吗");
answer = sc.nextLine();
}while(!"爱".equals(answer));
System.out.println("哈哈");
}
}

1.5 循环嵌套
在循环中继续使用循环

案例:

1.请输出一个4行5列的星星(*)图案

/**
* 循环的嵌套:
* 循环中还有循环 两层嵌套
* 外层循环控制行
* 内层循环控制列
* 列不换行
* 内层循环结束后,再换行
*/
package com._51doit.javase.day04.loop; public class CircleDemo {
public static void main(String[] args) {
for(int i=1; i<=4;i++) {
for(int j=1;j<=5;j++) {
System.out.print("*");
}
System.out.println();
}
}
}

2.99乘法表的打印

package com._51doit.javase.day04.loop;

public class MultiTable {
public static void main(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 方法的调用

方法名(符合参数类型和个数的具体值)

练习:

package com._51doit.javase.day04.loop;

public class MethodTest {
public static void main(String[] args) {
printCha(12.5,34);
printAreaAndZHOfCircle(12);
printStar(8,10);
}
public static void printCha(double a,double b) {
System.out.println(a-b);
}
public static void printAreaAndZHOfCircle(double r) {
System.out.println("圆的周长为:"+2*3.14*r);
System.out.println("圆的面积为:"+3.14*r*r);
}
public static void printStar(int x,int y) {
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   后面的值要和返回值类型相一致

案例

package com._51doit.javase.day04.loop;

public class MethodTest {
public static void main(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(int a) {
return a%2==0;
}
public static double getCha(double x,double y) {
return x-y;
}
public static float getMax(float a,float b,float c) {
if(a>b&a>c) {
return a;
}else if(b>c) {
return b;
}else {
return c;
}
}
}

2.4 方法的重载

概念:一个类中可以存在多个名字相同的方法,但是必须保证参数的个数或类型不同,其与返回值无关

TODO:在代码里充当书签,便于定位

案例

 1 package com._51doit.javase.day04.loop;
2
3 public class ReloadMethod {
4 public static void main(String[] args) {
5 System.out.println(getSum(1,2));
6
7 }
8 public static long getSum(long a, long b) {
9 System.out.println("long......");
10 return a+b;
11 }
12 public static long getSum(int a, int b) {
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, long b) {  //第8行
2
3
4 public static long getSum(long a, int b) { 第12行

这样会报错,main()方法将不知道要调用哪一个getSum方法,报错信息如下:

最新文章

  1. 忘记Mysql的root密码怎么办?
  2. 深入浅出 - Android系统移植与平台开发(二) - 准备Android开发环境
  3. ubunt tmux X Error of failed request
  4. JAVA自已设计JSON解析器
  5. nginx 匹配.zip .apk 结尾的文件 直接下载
  6. 转】用Maven构建Mahout项目
  7. REST_FRAMEWORK加深记忆-第二次练习官方文档2
  8. (转)Mongodb相对于关系型数据库的优缺点
  9. Python执行效率测试模块timei的使用方法与与常用Python用法的效率比较
  10. mina编解码(摘录)
  11. 【HDOJ】2416 Treasure of the Chimp Island
  12. swt
  13. CSS中zoom和scale的区别
  14. Netty4.0学习教程
  15. Linux 下定时备份数据库以及删除缓存
  16. 【简】题解 AWSL090429 【数塔问题】
  17. nginx实现反向代理,以反向代理tomcat为例
  18. WCF消息传递
  19. Beta冲刺
  20. L1-031 到底是不是太胖了

热门文章

  1. (一)lamp 环境搭建之编译安装apache
  2. ELK集群之kafka(7)
  3. 攻防世界 WEB 高手进阶区 tinyctf-2014 NaNNaNNaNNaN-Batman Writeup
  4. 『学了就忘』Linux基础命令 — 34、配置网络相关命令
  5. Linux usb 3. Host 详解
  6. 问题 D: 某种序列
  7. ES6--ES12笔记整理(1)
  8. [cf1427E]Xum
  9. [bzoj1280]卖猪
  10. Abp Vnext Blazor替换UI组件 集成BootstrapBlazor(详细过程)