Java语言基础第四讲
一.循环语句概述
- 循环语句的分类
- for语句;
- while语句;
- do…while语句.
一.循环结构 for语句的格式及其使用
for语句格式: for(初始化表达式;条件表达式;循环后的操作表达式) { 循环体; }
执行流程:
- 执行初始化语句;
- 执行判断条件语句,看其返回值是true还是false,如果是true,就继续执行,如果是false,就结束循环;
- 执行循环体语句;
- 执行循环后的操作表达式;
- 回到第二步继续.
格式演示—输出十个helloworld.
class For_1 { public static void main(String[] args) { for (int i = 1;i <= 10 ; i++ ) { System.out.println("Hello World!"); } } }
- 注意事项
- 判断条件句无论简单还是复杂输出结果都应该是Boolean类型;
- 循环体语句如果是一句语句,大括号可以省略,如果是多句,就不能省略,建议永远不要省略;
- 一般情况下,有大括号就没有分号,有分号就没有大括号.
练习一
- 一:在控制台输出1–10;
二:在控制台输出10–1.
class For_2 { public static void main(String[] args) { //一:在控制台输出1--10; for (int x = 1;x <= 10 ;x++ ){ System.out.println("x = " + x); } System.out.println("------------"); //二:在控制台输出10--1. for (int x = 10;x >= 1 ;x-- ){ System.out.println("x = " + x); } } }
循环结构for语句练习之求和思想
- 求出1–100之间的数据之和
- 求出1–100之间的偶数数据之和
求出1–100之间的奇数数据之和
class Test_for1 { public static void main(String[] args) { //1--100之间的数据之和 int sum = 0; for (int i = 1;i <= 100;i++ ) { sum = sum + i; } System.out.println("sum = " + sum); //求出1--100之间的偶数数据之和方法一 int sum = 0; for (int i = 1;i <= 100 ;i++ ) { if (i % 2 == 0) { sum = i + sum; } } System.out.println("sum = " + sum); //求出1--100之间的偶数数据之和方法二 int sum = 0; for (int i = 0;i <= 100 ;i += 2 ) { sum = i + sum; } //求出1--100之间的奇数数据之和方法一 int sum = 0; for (int i = 1;i <= 100 ;i++ ) { if (i % 2 != 0) { sum = i + sum; } } System.out.println("sum = " + sum); //求出1--100之间的奇数数据之和方法二 int sum = 0; for (int i = 1;i <= 100 ;i += 2 ) { sum = i + sum; } System.out.println("sum = " + sum); } }
循环结构for语句练习之水仙花
- 在控制台输出所有的”水仙花数”
- 水仙花—-指的是一个三位数, 其各位数字的立方和都等于其本身;
例如:153 = 1 * 1 * 1 + 5 * 5 * 5 + 3 * 3 *3 = 1 + 125 + 27 = 153
//水仙花数 class Test_for2 { public static void main(String[] args) { for (int i = 100;i <= 999 ;i++ ) { //在100--999之间取数,将该数个位,十位,百位分别单提出来计算比较 int g = i % 10; //个位数.例123 % 10 取余3 int s = i / 10 % 10; //十位数,12 % 10 取余2 int b = i / 10 / 10 % 10; //百位数,1 % 10 左边绝对值小于右边,结果为左边 if (g * g * g + s * s * s + b * b * b == i) { System.out.println(i); } } } }
循环结构for语句练习之统计思想
- 统计水仙花数在100–999之间共有几个?
求出100-999中的第一个水仙花数以及在这个范围内水仙花数的个数
//统计水仙花数在100--999之间共有几个? class Test_for3 { public static void main(String[] args) { int x = 0; //定义一个变量来统计记录水仙花数的个数 for (int i = 100 ;i <= 999 ;i++ ) { int g = i % 10; int s = i / 10 % 10; int b = i / 10 / 10 % 10; if (i == g * g * g + s * s * s + b * b * b) { x++; //如果计算后的数是水仙花数,变量x自增 } } System.out.println("x = " + x); } } //求出100-999中的第一个水仙花数以及在这个范围内水仙花数的个数 class Demo_Flower { public static void main(String[] args) { int x = 0; //定义一个变量来统计记录水仙花数的个数 for (int i = 100 ;i <= 999 ;i++ ) { int g = i % 10; int s = i / 10 % 10; int b = i / 100 % 10; if (i == g * g * g + s * s * s + b * b * b) { x++; //如果计算后的数是水仙花数,变量x自增 if (x == 1) { System.out.println("第一个水仙花是" + i); } } } System.out.println("x = " + x); } }
- 二.循环结构 while 语句的格式及其使用
while语句循环的格式
while语句循环的基本格式: while (条件判断语句){ 循环体语句; } while循环语句的完整格式: 初始化语句; while (条件判断语句) { 循环体语句; 控制条件语句; }
- 执行流程:
- 先执行初始化语句;
- 执行条件判断语句,看输出结果是true还是false,
- 如果是true就执行循环语句体,
- 如果是false就就结束循环;
- 执行循环体语句;
- 执行控制条件语句;
- 回到第二步继续操作.
练习操作—-请在控制台输出1–10.
//练习操作----请在控制台输出1--10. class Test1_While { public static void main(String[] args) { int i = 1; while (i <= 10) { System.out.println("i = " + i); i++; } } } //对比输出结果,观察 i++ 位置不同,结果的不同.(回想顺序结构). class Test1_While { public static void main(String[] args) { int i = 1; while (i <= 10) { i++; System.out.println("i = " + i); } } }
循环结构 while 语句的练习
- 一.求和思想:求出1–100的和;
二.统计思想:在100–999之间统计水仙花数的个数.
class Test2_While { public static void main(String[] args) { //求和思想:求出1--100的和; int sum = 0; int i = 1; while (i <= 100) { sum = sum + i; i++; } System.out.println("sum = " + sum); //统计思想:在100--999之间统计水仙花数的个数. int count = 0; int j = 100; while (j <= 999) { int g = j %10; int s = j /10 % 10; int b = j/ 10 / 10 % 10; if (j == g * g * g + s * s * s + b * b * b) { count++; } j++; } System.out.println("count = " + count); } }
- 三.循环结构 do…while 语句的格式和使用
do…while 语句的基本循环格式:
do { 循环体语句; }while条件判断句; 完整格式: 初始化语句; do { 循环体语句; 控制条件语句; } while条件判断句;
- 执行流程:
- 先执行初始化语句;
- 执行循环体语句;
- 执行控制条件语句;
- 执行while条件判断句,看结果是true还是false,
- 如果是true,继续执行循环体语句,
- 如果是false,结束循环语句;
- 回到第二步继续操作.
练习操作—-请在控制台输出1–10.
//请在控制台输出1--10 class Test_DoWhile1 { public static void main(String[] args) { int i = 1; do { System.out.println("i = " + i); i++; } while (i <= 10); } }
循环结构中三种循环语句的区别
- do…while循环至少执行一次循环体;
- 而for,while循环语句得要先确定条件判断句是否成立,然后才决定是否进行执行循环体语句.
如果循环结束后,你还想用哪个控制条件的变量,就用while循环语句,反之就用for语句,因为for语句执行后变量会被释放掉,不能再进行使用.
//三种循环结构语句的区别 //请在控制台输出1--10 class Test_DoWhile2 { public static void main(String[] args) { //for语句和while语句的区别:for语句定义了变量i之后,while语句还可以定义,反之不行,因为for语句结束后会释放变量;而while语句执行后,初始化变量还能继续使用, for (int i = 1;i <= 10 ; i++ ) { System.out.println("i = " + i); } System.out.println("-----------"); int i = 1; while (i <= 10) { System.out.println("i = " + i); i++; } System.out.println("-----------"); //while语句和do...while语句的区别:do...while至少要执行一次循环体语句. int i = 11; while (i <= 10) { System.out.println("i = " + i); i++; } System.out.println("-----------"); int j = 11; do { System.out.println("j = " + j); j++; } while (j <= 10); } }
- 循环结构注意事项之死循环
- 一定要注意控制条件语句中哪个变量问题,不要弄丢了,否则就容易死循环.
- while语句死循环: while (true) {…}
- for语句死循环: for (;;) {…}
- 循环语句之嵌套输出4行5列的星星
操作练习—-请在控制台输出一个4行5列的星星的图案,如下图:
***** ***** ***** ***** class XingXing { 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("*"); } } }
练习
请输出图形,正三角形,和倒三角形.图形如下:
* ***** ** **** *** *** **** ** ***** * //正三角形 class ForFor2 { public static void main(String[] args) { for (int i = 0;i <= 5;i++) { //内循环决定行数 for (int j = 1;j <= i;j++) { //外循环决定列数 System.out.print("*"); } System.out.println(); //将光标换到下一行行首 } System.out.println("-----------"); //倒三角形 for (int i = 5;i >= 1;i--) { //内循环决定行数 for (int j = 1;j <= i;j++) { //外循环决定列数 System.out.print("*"); } System.out.println(); //将光标换到下一行行首 } } }
循环语句之嵌套输出九九乘法表
/*循环语句之嵌套输出九九乘法表 1 * 1 = 1 1 * 2 = 2 2 * 2 = 4 1 * 3 = 3 2 * 3 = 6 3 * 3 = 9 ... */ class ForFor3 { 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(); } } } /*注意: '\x',x表示任意,'\'表示转义符号,这种做法叫做转义字符. '\t'表示teb键的位置; '\r'表示回车; '\n'表示换行; '\"'表示输出双引号; '\''表示输出单引号. */
二.控制跳转语句
- break 语句—- 只能在switch语句和循环语句中使用,意思是跳出或终止循环.
- continue 语句—- 只能在循环语句中使用,意思是终止本次循环,继续下次循环.
return 语句—-意思是返回,他的作用不是用来结束循环的,而是用来返回方法的.
//break 语句---- 只能在switch语句和循环语句中使用,意思是跳出或终止循环. class Demo_break { public static void main(String[] args) { for (int i = 1;i <= 10 ;i++ ) { if (i == 4) { break; } System.out.println("i = " + i); } } } //continue 语句---- 只能在循环语句中使用,意思是终止本次循环,继续下次循环. class Demo_continue { public static void main(String[] args) { for (int i = 1;i <= 10 ;i++ ) { if (i == 4) { continue; } System.out.println("i = " + i); } } }
- 控制跳转语句标号
- 标号—-标记某个循环对其控制;
- 标号组成规则—-其实就是合法的标识符.
- break,continue以及return的区别:
- break用来结束循环;
- continue用来终止本次循环,继续下次循环;
- return用来返回方法.
获取100-999之间的第一个水仙花数
//获取100-999之间的第一个水仙花数 class Test_break { public static void main(String[] args) { for (int i = 100;i <= 999 ;i++ ) { int g = i % 10; int s = i /10 % 10 ; int b = i / 100 % 10; if (i == g * g * g + s * s * s + b * b * b) { System.out.println("第一个水仙花数是" + i); break; } } } }
三.方法的概述和说明
- 方法—-指的是完成特定功能的代码块,从而来提高代码的复用性.
方法的格式
修饰符 返回值类型 方法名 (参数类型 参数名1,参数类型 参数名2) { 方法体语句; return 返回值; }
方法的格式说明:
- 修饰符: 目前就用 public static .
- 返回值类型: 就是功能结果的数据类型(基本数据类型int,double,shoot,char,Boolean和引用数据类型) ;
- 方法名: 就是合法的标识符,符合命名规则就行;
- 参数: 分为实际参数和(实际参与运算的参数)形式参数(方法定义上的,用来接收实际参数的);
- 参数类型: 就是实际的数据类型;
- 参数名: 就是变量名;
- 方法体语句: 就是完成功能的代码;
- 返回值: 就是功能的结果,由return 带回给调用者.
方法的求和案例及其调用
/* 求两个整数之和 1.整数相加之后的结果还应该是整数 2.有两个未知内容参与运算 如何写一个方法 1.明确返回值类型 2.明确参数列表 */ class Dome_Method { //method 方法,add 加法,做加法. public static void main(String[] args) { int sum = add(10,20); //1.调用add方法,将10和20分别传递给a和b; System.out.println("sum = " + sum); } //5.将方法的结果返回给sum. public static int add (int a,int b) { //2.赋值a=10,b=20; int sum = a + b; //3.执行语句将a和b相加然后赋给sum return sum; //4.通过return将sum的值返回. } }
方法的注意事项
- 方法不调用不执行;
- 方法与方法之间是平级的,不能嵌套使用;
- 方法定义的时候参数之间用逗号隔开;
- 方法调用的时候不用在传递数据类型;
- 如果方法有一个明确的返回值,就必须有一个return带回一个值.
方法的练习
- 键盘录入两个数据,返回两个数据中较大的数据;
键盘录入两个数据,比较两个数是否相等.
/* 键盘录入两个数据,返回两个数据中较大的数据; 键盘录入两个数据,比较两个数是否相等.*/ import java.util.Scanner; //导入包中的类 class Method { public static void main(String[] args) { Scanner sc = new Scanner(System.in); //录入键盘输入对象 System.out.println("请输入一个整数"); //将键盘录入的数据存储在x中 int x = sc.nextInt(); System.out.println("请输入一个整数"); //将键盘录入的数据存储在y中 int y = sc.nextInt(); int sum = max(x,y); System.out.println("sum = " + sum); boolean q = isEquals(x,y); System.out.println(q); } //返回两个数据中较大的数据; //明确返回值类型 int;明确参数列表 int x,int y. public static int max(int x,int y) { return x > y ? x : y; } //比较两个数是否相等. //明确返回值类型 Boolean;明确参数列表 int a,int b; public static boolean isEquals(int a,int b){ //isEquals 是否相等 return a == b; } }
- 方法的调用
- 单独调用,一般来说没有意义,所以不推荐;
- 输出调用,可以但是还不够好,因为可能针对一些输出结果进行进一步操作;]
- 赋值调用,推荐使用.
根据键盘录入的行数和列数,在控制台输出星形.
//根据键盘录入的行数和列数,在控制台输出星形. import java.util.Scanner; //导入包中的类 class Demo_Method1 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入一个行数"); //将录入的数据存储在row中.row行数 int row = sc.nextInt(); System.out.println("请输入一个列数"); //将录入的数据存储在column中.column列数 int column = sc.nextInt(); //System.out.println(print(row,column)); //错误,此处不能用"空"类型,返回值是void的方法只能单独调用. print(row,column); } /*在控制台输出星形 明确返回值类型,星形没有具体的返回值类型,故用void 明确参数列表int a */ public static void print(int a,int b){ for (int i = 1;i <= a ;i++ ) { //行数 for (int j = 1;j <= b ;j++ ) { //列数 System.out.print("*"); } System.out.println(); } //return; //如果返回值类型是void,return可以省略,即使省略系统也会默认加上,形式就是return. } }
练习—-键盘录入数据输出对应的九九乘法表
//练习----键盘录入数据输出对应的九九乘法表 import java.util.Scanner; class Demo_Method2 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入一个整数,范围在1--9之间"); int x = sc.nextInt(); print99(x); } /*输出对应的九九乘法表 明确返回值类型 int 明确参数列表 int a */ public static void print99(int a) { for (int i = 1;i <= a ;i++ ) { for (int j = 1;j <= i ;j++ ) { System.out.print(j + "*" + i + "=" + (i * j) + "\t"); } System.out.println(); } } }
四,方法重载的概述和基本使用
- 方法重载—-在同一个类中,方法名相同,参数列表不同,与返回值类型无关.
- 参数列表不同:
- a.参数个数不同;
- b.参数类型不同;
- c.参数顺序不同(在开发中不用).
- 参数列表不同:
求和案例
- 2个整数
- 3个整数
2个小数
class Test_Overload { //Overload 重载 public static void main(String[] args) { int sum = add(10,20); System.out.println(sum); int sum1 = add(10,20,30); System.out.println(sum1); double sum2 = add(12.3,13.4); System.out.println(sum2); } /*求两个整数之和 1.返回值类型 int 2.参数列表int a,int b. */ public static int add(int a,int b) { return a + b; } /*求三个整数之和 1.返回值类型 int 2.参数列表int a,int b,int c. */ public static int add(int a,int b,int c) { return a + b + c; } /*求两个小数之和 1.返回值类型 double 2.参数列表double a,double b.*/ public static double add(double a,double b) { return a + b ; } }
方法重载练习: 比较数据是否相等
参数类型分别为2个double 类型,2个int 类型,并在main方法中测试.
/* 方法重载练习: 比较数据是否相等 参数类型分别为2个long类型,2个int 类型,并在main方法中测试.*/ class Overload2 { public static void main(String[] args) { boolean b = isEquals(10,10); System.out.println(b); boolean b1 = isEquals(12.3,10.5); System.out.println(b1); } /*2个int 类型数据比较是否相等 返回值类型boolean 参数列表 int a,int b*/ public static boolean isEquals(int a,int b){ return a == b; } /*2个int 类型数据比较是否相等 返回值类型boolean 参数列表 double a,double b*/ public static boolean isEquals(double a,double b){ return a == b; } }