赞
踩
我们自从开始写Java代码,就一直说方法方法,main方法啦,print方法啦,那到底什么是方法呢,我们现在就来具体学习一下
第一种: 顺序结构
是指按照代码的书写顺序,从上往下执行
默认所有代码都是按照顺序结构来执行
第二种: 分支结构
if分支结构
switch分支结构(了解)
第三种: 循环结构
如果有某一行代码或者某些行代码需要重复的执行若干次,这样的结构叫做循环结构
for循环
while循环
do…while循环(了解)
foreach循环(增强for循环)
顺序结构的程序虽然能解决计算、输出等问题,但不能做判断再选择。对于要先做判断再选择的问题就要使用分支结构
当我们遇到一种情况需要判断是还是不是的时候,就可以使用单分支判断,举个例子,如果XXX同学是男生就应该去男厕所
格式1: 单分支
if(布尔表达式){
//代码...
}
判断条件执行成立时
如果if后面的表达式为true,就会执行大括号{}里面的代码
if和else后面的大括号({})可以省略,但省略后在执行时只会执行if和else后面的第一行代码。
if(布尔表达式)
//代码1,如果上面的布尔表达式为true,只会执行代码1
//代码2,如果上面的布尔表达式为true,代码2执行不到
代码示例
package cn.tedu; /** * 单条件分支结构 * if(条件表达式){ * //满足条件执行的代码 * } * @author Administrator * */ public class SingleIfDemo { public static void main(String[] args) { int score = 59; //百分制中分数大于60就是及格 if(score > 60) { //满足条件才执行 System.out.println("及格!!!"); } } }
但是我们生活中,并不是总是这种单分支判断,比如我们也会有这样的抉择,如果XXX同学是男生就应该去男厕所,否则就应该去女厕所,那么这种就是两种判断了对吧
格式2: 多分支
if(布尔表达式){
//代码若干行...
}else{
//代码若干行...
}
如果if后面的表达式为true,就会执行if后面大括号{}里面的代码
如果表达式为false,就会执行else后面大括号{}里面的代码
代码示例:
package cn.tedu; /** * 多分支if-else * if(表达式){ * //满足执行条件的代码 * }else{ * //不满足条件执行的代码 * } * @author Administrator */ public class IfElseDemo { public static void main(String[] args) { int score = 19; if(score > 60) { //满足 System.out.println("及格"); }else { //不满足 System.out.println("不及格,得努力学习"); } } }
当然啦,还有更多的可能,比如XXX同学是男生就要去男厕所,如果是女生就去女厕所,如果不是男的也不是女的就应该去哪里呢?但是确实是有多种情况会发生
格式3: 嵌套分支 if(布尔表达式1){ //代码若干行... }else if(布尔表达式2){ //代码若干行... }else if(布尔表达式3){ //代码若干行... }else if(布尔表达式n){ //代码若干行... }else{ //代码若干行... } 如果if后面的表达式1为true,就会执行if后面大括号{}里面的代码 如果else if后面的表达式2为true,就会执行else if后面大括号{}里面的代码 ... 如果上面的条件都不满足,最后会执行else后面大括号里面的代码
接收用户输入的原价。
满1000打9折。
满2000打8折。
满5000打5折。
package cn.tedu.ifdemo; import java.util.Scanner; //这个类用来测试商品打折案例 public class Test1_If { public static void main(String[] args) { //1、接收用户输入的原价 double price = new Scanner(System.in).nextDouble(); //2、计算折后价 double count = price;//用来保存折后价 if(price> = 5000){//满5000。 count = price * 0.5;//打5折 }else if(price >= 2000){ //满2000 count = price * 0.8;//打8折 }else if(price >= 1000){ //满1000打9折 count = price * 0.9; } System.out.println("原价是:"+price+",折后价是:"+count); } }
BMI指数计算
package day0302; import java.util.Scanner; public class Test1 { public static void main(String[] args) { System.out.print("体重:"); //获得输入的值,再保存到变量 w //局部变量,作用域在他定义的代码块内有效 double w = new Scanner(System.in).nextDouble(); System.out.print("身高:"); double h = new Scanner(System.in).nextDouble(); //调用 f() 方法,根据 w 和 h 的值,求出 bmi 指数 f(w, h); }//main结束 static void f(double weight, double height) { double bmi = weight / (height*height); String r = ""; //用来保存最终结果的变量 //根据 bmi 指数范围,来给r重新赋值 if(bmi < 18.5) { r = "过轻"; } else if(bmi <= 22.9) { r = "正常"; } else if(bmi <= 24.9) { r = "偏胖"; } else if(bmi <= 29.9) { r = "肥胖"; } else if(bmi <= 40) { r = "重度肥胖"; } else { r = "极度肥胖"; } System.out.println("BMI指数:"+bmi); System.out.println("您的体重属于:"+r); } }
年龄段划分
/* * 根据年龄判断年龄段 * 青年人:20(包括) ~ 40(不包括) * 中年人:40(包括) ~ 60(不包括) * 老年人:60(包括)以上 */ public class IfDemo1 { public static void main(String[] args) { System.out.println( "请输入您的年龄:" ); byte age = new Scanner(System.in).nextByte(); if( age>=18 && age<40 ) { System.out.println( "您属于青年人!" ); }else if( age>=40 && age<60 ) { System.out.println( "您属于中年人!" ); }else if( age>=60 ) { System.out.println( "您属于老年人!" ); }else if( age>=0 && age < 18 ){ System.out.println( "您属于未成年人!" ); }else { System.out.println( "您输入的年龄有误!" ); } } }
成绩转换
/* * 实现一个分数评级小程序:提示用户在控制台输入考试成绩,如果成绩: * 大于90,小于等于100,为 "优秀"; * 大于80,小于等于90,为 "良好"; * 大于70,小于等于80,为 "中等"; * 大于等于60,小于等于70,为 "及格"; * 小于60为 "不及格"; * 如果以上都不是,则提示 "输入有误" */ public class IfDemo2 { public static void main(String[] args) { System.out.println( "请输入您的成绩(百分制):" ); byte score= new Scanner(System.in).nextByte(); if( score>=90 && score<100 ) { System.out.println( "优秀!" ); }else if( score>=80 && score<90 ) { System.out.println( "良好!" ); }else if( score>=70 && score<80) { System.out.println( "中等!" ); }else if(score>=60 && score<70){ System.out.println( "及格!" ); }else if( score>=0 &&score<60 ){ System.out.println( "不及格!" ); }else { System.out.println( "您输入的成绩有误!" ); } } }
switch分支在开发中用的并不多!
switch分支用于判断一个变量的值,与case中的某个值是否相等,如果相等,则执行该case中的代码
switch可以接收的类型有: byte,short,int,char,String(JDK1.7)
switch( x ){ case value1:{ //代码... break; //防止穿透 } case value2: //代码... break; ... case valueN:{ //代码... break; } default: { //代码... } }
执行规则如下:
1)传入switch语句的变量类型可以是: byte/short/int/char,jdk1.7之后开始支持String类型
2)当执行switch语句时,会拿着传过来的变量值 和 case 后的每一个值进行比较,如果相等,就会执行该case后的代码
3)每一个case中的break关键字可以防止穿透效果
4)如果所有case后的值都不匹配, 最后会执行default中的代码。
5)case value:后面的大括号可以省略,也可以加上,两者没有任何区别
数字匹配
package cn.tedu.ifdemo; //这个类用来测试switch分支结构 public class Test2_Switch { public static void main(String[] args) { int a = 20; //a--可以支持5种类型:byte short int char jdk1.5后支持String switch(a) { case 1:System.out.println(1); case 2:System.out.println(2);break; case 3:System.out.println(3); case 4:System.out.println(4); //1、当成功匹配到case会执行代码,并继续向后穿透所有case包括default //2、break的作用用来结束程序 //3、当没有匹配到任何case时,只会执行default的代码 default:System.out.println(0); } } }
手机选号
尾数8,50 尾数4,免费 其他,20 项目:day0303_手机选号 类:day0303.Test1 package day0303; import java.util.Scanner; public class Test1 { public static void main(String[] args) { System.out.println("输入手机号:"); String s = new Scanner(System.in).nextLine(); //调用f()方法,把s的值,传递到f()方法中,计算价格 f(s); }//main结束 static void f(String tel) { //tel的长度,必须是11 if(tel.length() != 11) { System.out.println("号码格式错误"); return;//结束方法,返回到调用位置再继续执行 } /* * tel = "2313123123" * 取最后一个字符 * char c = tel.charAt(10) */ //取第11个字符,它的下标位置是10 char c = tel.charAt(10); //用来保存最终结果的变量 price int price = 0; //根据c字符的值,来为price重新赋值 switch(c) { case '8': price=50; break; case '4': price=0; break; default: price=20; } //显示价格 System.out.println("价格:"+price); } }
实现ATM机系统(简易)
实现一个模拟ATM机系统,根据用户输入的代码,打印不同的操作
例如, 输入操作: 1-查询余额, 2-存钱, 3-取钱, 4-退出
1:查询成功!
2:存钱成功!
3:取钱成功!
4:退出!
其他:您的输入有误,请重新输入!
public class SwitchDemo1 { public static void main(String[] args) { //1.提示用户输入相应的操作代码 System.out.println( "欢迎使用达内ATM机系统..." ); System.out.println( "请输入1:查询账户,2:存钱,3:取钱,4:退出" ); //2.接收用户输入的操作代码 int x = new Scanner(System.in).nextInt(); //3.通过switch判断x的值,并执行相应的操作 switch( x ) { case 1: System.out.println( "您的账户余额为1000.0元" ); break; //防止穿透效果 case 2: System.out.println( "存钱成功,账户余额为1500.0元" ); break; case 3: System.out.println( "取钱成功,账户余额为1300.0元" ); break; case 4: System.out.println( "退出成功,谢谢使用" ); break; default: System.out.println( "输入错误,请重新输入!" ); } } }
实现ATM机系统(增强)
对上面练习中的ATM系统进行增强,实现查询余额、存钱、取钱操作。
例如, 输入操作: 1-查询余额, 2-存钱, 3-取钱, 4-退出
1:您的账户余额为:
2:请放入您的钞票…(输入存入的金额):
…
存钱成功! 您的账户余额为:" + balance
3:请输入您的取款金额:
如果余额>=取款金额:
取款成功! 请收好您的钞票!
否则:您的账户余额不足!
4:请收好您的卡片,谢谢使用!
其他:您的输入有误,请重新输入!
/* * 实现模拟ATM机系统 */ public class SwitchDemo2 { public static void main(String[] args) { //1.声明一个变量, 用于记录账户的余额(假设账户余额为3000) double balance = 3000; //2.提示用户输入相应的操作代码 System.out.println( "欢迎使用达内ATM机系统..." ); System.out.println( "请输入 1:查询账户, 2:存钱业务, 3:取钱业务, 4:退卡 " ); //3.接收用户输入的操作代码 int x = new Scanner(System.in).nextInt(); //4.通过switch结构判断x的值,并执行相应的操作 switch( x ) { case 1: System.out.println( "您的账户余额为: "+balance ); break; //防止穿透 case 2: System.out.println( "请输入要存入的金额: " ); //接收用户存入的金额数量 double money = new Scanner(System.in).nextDouble(); //将用户存入的钱数 和 账户余额相加 balance += money; //balance = blance+money; System.out.println("存钱成功!账户余额为"+balance+"元!" ); break; case 3: System.out.println( "请输入要取的金额: " ); //接收用户要取的金额 double money2 = new Scanner(System.in).nextDouble(); //取款金额要小于或等于账户余额 if( money2 <= balance ) { balance -= money2; //balance = balance - money2; System.out.println("取钱成功!账户余额为"+balance+"元!" ); }else { System.out.println( "取钱失败! 账户余额不足!" ); } break; case 4: System.out.println( "退出成功,谢谢使用!" ); break; default: System.out.println( "输入代码有误, 请重新输入" ); } } }
顺序结构的程序语句只能被执行一次。如果想要重复的(或有规律的)执行某一个操作,就需要使用循环结构。
例如:如果让你在控制台输出一百次 “Hello World!”,你将如何完成?
for(开始条件;循环条件;更改条件){
循环体;
}
1)最先执行初始化步骤,且只执行一次。这里可以声明一种类型,也可以同时初始化一个或多个循环控制变量,也可以是空语句。
2)其次,检测循环条件(是一个布尔表达式)的值。如果为 true,循环体被执行;如果为false,循环终止,开始执行循环语句后面的语句。
3)在执行一次循环体后,再执行更新部分,也就是更新循环控制变量。
4)再次检测布尔表达式。重复执行2~3步骤。(当第二步中的布尔表达式为false时,停止循环)
for( int i = 0; i<100 ;i++) {
System.out.println("HelloWorld!---"+i);
}
执行过程解析:
1)第001次执行: 先执行 int i=0;(这一部分只执行一次), 再执行 i<100(true), 执行大括号里面的内容(循环体), 最后执行i++(此时i=1)
2)第002次执行: 执行 i<100(i=1,true),再执行循环体,最后执行i++(此时i=2)
3)第003次执行: 执行 i<100(i=2,true),再执行循环体,最后执行i++(此时i=3)
…
4)第099次执行: 执行 i<100(i=98,true),再执行循环体,最后执行i++(此时i=99)
5)第100次执行:执行i<100(i=99,true),再执行循环体,最后执行i++(此时i=100)
6)第101次执行: 执行 i<100(i=100,false),循环结束
打印 1 ~ 100 之间的所有整数值,用空格隔开
for( int i = 0; i<100 ;i++) {
System.out.print(i+1+" ");
}
//==============================
for( int i = 1; i<=100 ;i++) { //5050
System.out.print(i+" ");
}
打印100到1
//打印100到0
for(int i = 100 ; i >= 1 ; i-- ){
System.out.println(i);
}
求 1~100 之间所有的整数值的和,并输出到控制台
int sum = 0;
for(int i=1;i<=100;i++){ //1,2,3,4...99,100
sum = sum+i; //sum += i
}
System.out.println( "1~100之间所有整数的和为:"+sum )
求 1~100之间所有奇数的和, 输出到控制台
int sum2 = 0;
for( int i=1; i<=100; i+=2 ) {
sum2 = sum2 + i;
}
int sum2 = 0;
for( int i=1; i<=100; i++ ) {
if( i % 2 == 1 ){ //如果是奇数,就累加到sum2上
sum2 += i;
}
}
求 1~100之间所有偶数的和, 输出到控制台
int sum3 = 0;
for( int i=0; i<=100; i+=2 ) {
sum3 = sum3 + i;
}
System.out.println( "1~100之间所有偶数的和为:"+sum3 );//2550
-----------------------------------
int sum3 = 0;
for( int i=0; i<=100; i++ ) {
if( i % 2 == 0 ){ //如果是偶数,就累加到sum3上
sum3 += i;
}
}
鸡兔同笼
鸡兔共35只
共94只脚
鸡和兔各几只
穷举法
鸡 兔
0 35
1 34
2 33
3 32
…
23 12
…
35 0
package day0305;
public class Test1 {
public static void main(String[] args) {
//鸡j: 0到35
//兔t: 35到0
for(int j=0,t=35; j<=35; j++,t--) {
//脚的数量是94
if(j*2 + t*4 == 94) {
System.out.println("鸡:"+j+", 兔:"+t);
}
}
}
}
随机生成十道加法题
package com.tedu; import java.util.Random; import java.util.Scanner; public class a { public static void main(String[] args) { int yesCount=0; int noCount=0; for(int i=0;i<10;i++) { int a = new Random().nextInt(11); int b = new Random().nextInt(11); System.out.println("第"+(i+1)+"题:"+a+"+"+b+"=?"); int answer = new Scanner(System.in).nextInt(); if(answer==(a+b)) { System.out.println("恭喜答案正确,奖励一颗糖果!!"); yesCount++; }else { System.out.println("可惜打错!!!打屁屁"); noCount++; } System.out.println("第"+(i+1)+"题答案:"+(a+b)); } System.out.println("答对"+yesCount+"道题,打错"+noCount+"道题"); } }
打印8,88,888,8888
// 打印8,88,888,8888,
for(int i = 8 ; i <= 8888 ; i=i*10+8){
System.out.print(i+",");
}
阶乘
5!=5x4x3x2x1
0!=1
package day0306; import java.util.Scanner; public class Test1 { public static void main(String[] args) { System.out.print("输入整数,求阶乘:"); int n = new Scanner(System.in).nextInt(); //调用f()方法,把n的值传递到f()方法,求阶乘 f(n); } private static void f(int n) { if(n<0) { System.out.println("无"); return;//方法结束,返回到调用位置继续执行 } if(n == 0) { System.out.println("0的阶乘:1"); return; } /* * r = 5 * * i * 4, r=r*i * 3, r=r*i * 2, r=r*i * 1, r=r*i */ long r = n; for(int i=n-1; i>=1; i--) { r *= i; } System.out.println(n+"的阶乘:"+r); } }
如果把一个循环放在另一个循环体内,那么就可以形成嵌套循环。
嵌套循环既可以是for循环嵌套for循环,也可以是while循环嵌套while循环,或者for循环嵌套while循环……即各种类型的循环都可以作为外层循环,也可以作为内层循环
for( 初始化; 循环条件; 更新) { //外层循环
...外循环体
for( 初始化; 循环条件; 更新) { //内层循环
//内循环体
}
...外循环体
}
执行规则如下:
1)最先执行初始化步骤,且只执行一次。这里可以声明一种类型,也可以同时初始化一个或多个循环控制变量,也可以是空语句。
2)其次,检测循环条件(是一个布尔表达式)的值。如果为 true,循环体被执行;如果为false,循环终止,开始执行循环语句后面的语句。
至于循环体中包含的for循环, 则执行过程则和外层循环一样,只是外层循环每执行一次,内层循环都需要完整的执行一遍!
3)在执行一次循环体后,再执行更新部分,也就是更新循环控制变量。
4)再次检测布尔表达式。重复执行2~3步骤。(当第二步中的布尔表达式为false时,停止循环)
假设外层循环的循环次数为n次,内层循环的循环次数为m次,那么内层循环的循环体实际上需要执行n*m次
外层循环(i=1,i<=3)循环3次,内层循环(j=1,j<=5)循环5次, 在循环中输出i和j的值。
public static void main(String[] args) {
//外层循环执行3次,i为 1、2、3
for (int i = 1; i <= 3; i++) {
System.out.println( "i="+i );
//内层循环执行5次,j为1、2、3、4、5
for (int j = 1; j <= 5; j++) {
System.out.print( "j="+j+"\t" );
}
System.out.println();
}
}
数字矩阵
要求:使用嵌套for循环打印如下所示效果
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4
5 5 5 5 5
public class ForDemo2 {
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) {
//输出5遍i的值
for (int j = 1; j <= 5; j++) {
System.out.print( i + "\t" );
}
//换行
System.out.println();
}
}
}
打印左直角三角形
在控制台打印一个由5行 “*” 组成的正立的直角三角形,如下所示。
*
**
***
****
*****
public class ForDemo3 {
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= i; j++) {
System.out.print( "*" );
}
System.out.println();//换行
}
}
}
打印99乘法表
要求:使用嵌套for循环打印九九乘法表(9*9),如下所示。
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
1x4=4 2x4=8 3x4=12 4x4=16
1x5=5 2x5=10 3x5=15 4x5=20 5x5=25
1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81
for(int i = 1 ; i <= 9;i++){//外循环,执行9次,打印9行
for(int j=1;j<=i;j++){//内循环,修改内循环的循环条件,让j跟随i改变就可以
//System.out.print("3*2=6");//3是行号,2是列号,6是行列的乘积
System.out.print(i+"*"+j+"="+i*j+" ");
}
System.out.println();
}
for (int i=1;i<=9;i++){
for (int j =1;j<=9;j++){
if(j<=i){
System.out.print(j+"*"+i+"="+(i*j)+"\t");
}
}
System.out.println();
}
生成等腰三角形
*
package com.tedu; import java.util.Random; import java.util.Scanner; public class a { public static void main(String[] args) { for(int i = 0;i<5 ;i++ ){ for(int j = 0;j<9 ;j++ ){ if(j>=4-i&&j<=i+4){ System.out.print("*"); }else{ System.out.print(" "); } } System.out.println(); } } }
接下来我们来学习两个关键字,break和continue,这两个关键字都是结束循环的作用,只不过这两个关键字实现方式不一样
break主要用在循环语句或者switch语句中,用来跳出整个语句块。
break用在循环中用于跳出/结束当前循环,并且继续执行该循环下面的语句
循环输入整数,计算所有数值的和,当输入0时结束程序,最终输出所有数值的和
public class BreakDemo { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println( "请输入数值:"); //声明一个变量sum,用于记录输入的所有数值的和 int sum = 0; for ( ; ; ) { //死循环 int num = sc.nextInt(); //判断当前数值是否为0,如果为0,则结束当前整个循环,执行循环下面的语句 if( num == 0 ) { break; } //如果当前数值不为0,则将数值累加到sum上 sum = sum + num; } System.out.println( "输入的所有数的和为:"+sum ); } }
continue适用于任何循环控制结构中。作用是让程序立刻跳转到下一次循环的迭代。
在for循环中,continue语句使程序立即跳转到更新语句。
在while或者do…while循环中,程序立即跳转到布尔表达式的判断语句
计算1-100之间所有奇数的和(要求:使用continue关键字)
public class ContinueDemo {
public static void main(String[] args) {
//声明变量
int oddSum = 0;
for(int i = 1; i <= 100; i++ ) {
//判断当前i的值,若i为偶数,若是则继续下一次循环
if( i % 2 == 0) {
continue; //直接进入更新部分,下面的代码不再执行
}
//若i为奇数,则将i的值累加给sum
oddSum = oddSum + i;
}
System.out.println( "1-100之间所有奇数的和为:"+oddSum );
}
}
package day0402; public class Test1 { public static void main(String[] args) { System.out.println("\n\n---------------"); f1(); System.out.println("\n\n---------------"); f2(); } private static void f1() { // 随机浮点数,[0,1) //double d = Math.random(); //System.out.println(d); // >0.999 //i变量用来计次 for(int i=1; ;i++) { double d = Math.random(); if(d>0.999) { System.out.println("第"+i+"次:"+d); break; } } //System.out.println("循环已经结束"); } private static void f2() { //打印1到100,跳过尾数3,5,7 for(int i=1;i<=100;i++) { int y = i%10; if(y==3 || y==5 || y==7) { continue; } System.out.println(i); } } }
找数字88
接收用户输入的100次数字,
如果不是88继续输入,找到88就结束
package cn.tedu.method; import java.util.Scanner; //这个类用来测试break和continue //总结1:break是只要遇到循环立刻结束。continue是结束当前循环可以继续下一次的循环 public class Test2_Break { public static void main(String[] args) { method();//调用method() } //创建method() public static void method() { for(int i = 1 ; i <= 100 ; i++) {//控制for循环可以执行100次 //接收用户输入的100次数字 int input = new Scanner(System.in).nextInt(); if(input != 88) { //如果不是88 continue;//继续输入 // System.out.println(0);//break或者continue之后都不允许写代码,都是不可到达的代码 }else if(input == 88) {//找到88 System.out.println("恭喜您,猜对了!"); break;//结束 // System.out.println(1); } } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。