1.条件分支
1.1 单条件分支
语法结构:
if(逻辑运算){
一段代码
}
当逻辑运算结果为true时,执行{}中的代码
当逻辑运算结果为false时,什么都不做
如果"一段代码"只有一行,可以写成(省略花括号)
if(逻辑运算)
一行代码
示例1:如果张浩的Java考试成绩大于98分,张浩就能获得一个MP4作为奖励
public class SimpleIf {
public static void main(String[] args) {
int score = 91; //张浩的Java成绩
if ( score > 98 ) {
System.out.println("老师说:不错,奖励一个MP4!");
}
}
}
1.2 多条件分支
由多个if组成的分支,每个if都是独立的
public class SimpleIf {
public static void main(String[] args) {
int score = 91; //张浩的Java成绩
if ( score > 98 ) {
System.out.println("老师说:不错,奖励一个MP4!");
}
if ( score <= 98 ) {
System.out.println("老师说:惩罚进行编码!");
}
}
}
1.3 互斥条件分支(二选一)
语法结构:
if(逻辑运算){
一段代码
}else{
一段代码
}
if...else...两个分支一定会执行其中一个
示例3:判断输入的数字是否为偶数
/**
* 使用if-else结构实现幸运抽奖
*/
public class GoodLuck {
public static void main(String[] args) {
/* 产生随机数 */
int random = (int) (Math.random() * 10);
/* 从控制台接收一个4位会员号 */
System.out.println("我行我素购物管理系统 > 幸运抽奖\n");
System.out.print("请输入4位会员号: ");
Scanner input = new Scanner(System.in);
int custNo = input.nextInt();
/* 分解获得百位 */
int baiwei = custNo / 100 % 10;
/* 判断是否是幸运会员 */
if (baiwei == random) {
System.out.println(custNo + "是幸运客户,获精美Mp3一个。");
} else {
System.out.println(custNo + " 谢谢您的支持!");
}
}
}
1.4 多条件互斥条件分支(多选一)
1.4.1 if...else if...else...
语法结构
if(逻辑运算1){
一段代码
}else if(逻辑运算2){
一段代码
} ...
}else if(逻辑运算n){
一段代码
}else{
一段代码
}
if和else..if和else组成了多个分支,程序只能进入第一个符合条件的分支
public class CalcDiscount2 {
public static void main(String[] args){
/* 输入会员积分 */
System.out.print("请输入会员积分: ");
Scanner input = new Scanner(System.in);
int custScore = input.nextInt();
double discount;
/* 判断折扣 */
if (custScore < 2000) {
discount = 0.9;
} else if ( custScore>=2000 && custScore < 4000) {
discount = 0.8;
} else if ( custScore>=4000 && custScore < 8000) {
discount = 0.7;
} else {
discount = 0.6;
}
System.out.println("该会员享受的折扣是:" + discount);
}
}
1.4.2 switch(n)...case...语法
示例4:显示我行我素购物管理系统的登录菜单
public class LoginMenu {
/**
* 显示我行我素购物管理系统的登录菜单
*/
public static void main(String[] args) {
System.out.println("\n\t\t欢迎使用我行我素购物管理系统1.0版\n");
System.out.println("\t\t\t 1. 登 录 系 统\n");
System.out.println("\t\t\t 2. 退 出\n");
System.out.println("* * * * * * * * * * * * * * * * * * * * * * * * *\n");
System.out.print("请选择,输入数字:");
/* 从键盘获取信息,并执行相应操作---新加代码 */
Scanner input = new Scanner(System.in);
int num = input.nextInt();
switch (num) {
case 1:
/* 显示系统主菜单 */
System.out.println("\n\t\t欢迎使用我行我素购物管理系统\n");
System.out.println("* * * * * * * * * * * * * * * * * * * * * * * * * * \n");
System.out.println("\t\t\t\t 1. 客 户 信 息 管 理\n");
System.out.println("\t\t\t 2. 购 物 结 算\n");
System.out.println("\t\t\t 3. 真 情 回 馈\n");
System.out.println("\t\t\t 4. 注 销\n");
System.out.println("* * * * * * * * * * * * * * * * * * * * * * * * * * * \n");
System.out.print("请选择,输入数字:");
break;
case 2:
/* 退出系统 */
System.out.println("谢谢您的使用!");
break;
default:
System.out.println("输入错误。");
break;
}
}
}
如果符合某个分支,从某个分支开始执行
如果某个case分支不写break,继续执行下一个分支,直至遇到break或者所有分支全都执行完毕。
swith句式不能用于区间的判断,switch(n)中n的数据类型是有限制的,常规意义上只能是“byte,short,int,char”,当前的JDK1.8版本又支持了"String"类型
嵌套if
什么时候使用嵌套if?
例如:
学校举行运动会,百米赛跑跑入10秒内的学生有资格进决赛,根据性别分别进入男子组和女子组
分析:
1.要判断是否能够进入决赛
2.在确定进入决赛的情况下,还要判断是进入男子组,还是进入女子组
if(score<=10){
if(gender.equals("男")){
System.out.println("进入男子组决赛!");
}else if(gender.equals("女")){
System.out.println("进入女子组决赛!");
}
}else{
System.out.println("淘汰!");
}
例如:
public class CalcDiscount {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.println("请输入是否是会员:是(y)/否(其他字符)");
String identity = input.next();
System.out.println("请输入购物金额:");
double money = input.nextDouble();
if(identity.equals("y")){ //会员
if(money>200){
money = money * 0.75;
}else{
money = money * 0.8;
}
}else{ //非会员
if(money>100){
money = money * 0.9;
}
}
System.out.println("实际支付:" + money);
}
}
综合应用
题目:
public class ConsumeSavePlan {
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成方法存根
Scanner input = new Scanner(System.in);
System.out.print("请输入消费金额:");
double money = input.nextDouble();
double extra = 0; //换购付款
int choice = 0; //换购项目
if(money>=50){
System.out.println("是否参加优惠换购活动:");
System.out.println("1:满50元,加2元换购百事可乐饮料1瓶");
System.out.println("2:满100元,加3元换购500ml可乐一瓶");
System.out.println("3:满100元,加10元换购5公斤面粉");
System.out.println("4:满200元,加10元可换购1个苏波尔炒菜锅");
System.out.println("5:满200元,加20元可换购欧莱雅爽肤水一瓶");
System.out.println("0:不换购");
System.out.print("请选择:");
if(input.hasNextInt()==true){
choice = input.nextInt();
switch(choice){
case 1:
if(money>=50){
extra = 2;
}
break;
case 2:
if(money>=100){
extra = 3;
}
break;
case 3:
if(money>=100){
extra = 10;
}
break;
case 4:
if(money>=200){
extra = 10;
}
break;
case 5:
if(money>200){
extra = 20;
}
break;
default:
break;
}
}else{
System.out.println("请输入正确的数字!");
}
}
//结账
double total = money + extra;
System.out.println("本次消费总金额:"+ total);
if(choice == 1){
System.out.println("成功换购:" + "百事可乐饮料1瓶。");
}else if(choice ==2 ){
System.out.println("成功换购:" + "500ml可乐一瓶。");
}else if(choice == 3){
System.out.println("成功换购:" + "5公斤面粉。");
}else if(choice == 4){
System.out.println("成功换购:" + "1个苏波尔炒菜锅。");
}else if(choice == 5){
System.out.println("成功换购:" + "欧莱雅爽肤水一瓶。");
}else {
System.out.println("无换购项目!");
}
}
}
2.循环
简单理解:一件事重复做很多次,一段代码重复执行了N次
复杂理解:一段代码重复执行了N次,其中的变量每次都有变化
2.1 循环的要素
(1) 循环的开始边界
(2) 循环的结束边界
(3) 循环的增量
或
(1) 循环的条件
(2) 循环的增量
2.2 for循环
遵循规则:
(1) 循环的开始边界
(2) 循环的结束边界
(3) 循环的增量
适用于有明确循环次数的代码(执行多少次)
语法规则:
for(int i = 1; i <= 50; i++){
需要重复执行的代码
}
示例1:显示50以内所有符合“敲7”规则的数字
for(int i = 1; i <= 50; i++) {
int g = i % 10; //个位
int s = i / 10 ; //十位
if(i % 7 == 0 || (g == 7 || s == 7)) {
System.out.print(i);
System.out.print("\t");
}
}
for循环的执行顺序
for的死循环
- 没有开始边界,结束边界和增量
for(;;) {
}
- 没有增量
for(int i = 0; i <= 3;) {
}
- 没有结束边界
for(int i = 0;;i++) {
}
2.3 while循环/do...while循环
2.3.1 while循环
遵循规则:
(1) 循环的条件
(2) 循环的增量
适用于有明确循环条件的代码(什么情况下执行)
语法规则:
while(逻辑表达式){
需要重复执行的代码
}
当逻辑表达式为true时,会一直执行{}中的代码
示例2:商品价格查询
public class PriceLookup {
/**
* 商品价格查询
*/
public static void main(String[] args) {
String name = ""; //商品名称
double price = 0.0; //商品价格
int goodsNo = 0; //商品编号
System.out.println("MyShopping管理系统 > 购物结算\n");
//商品清单
System.out.println("*******************************************");
System.out.println("请选择购买的商品编号:");
System.out.println("1.T 恤 2.网球鞋 3.网球拍");
System.out.println("*******************************************");
Scanner input = new Scanner(System.in);
String answer = "y"; //标识是否继续
while("y".equals(answer)){
System.out.print("请输入商品编号:");
goodsNo = input.nextInt();
switch(goodsNo){
case 1:
name = "T 恤";
price = 245.0;
break;
case 2:
name = "网球鞋";
price = 570.0;
break;
case 3:
name = "网球拍";
price = 320.0;
break;
}
System.out.println(name+ "\t" + "¥" + price +"\n");
System.out.print("是否继续(y/n)");
answer = input.next();
}
System.out.println("程序结束!");
}
}
将敲7程序改成while循环实现
int i = 1;
while(i <= 50) {
int g = i % 10; //个位
int s = i / 10 ; //十位
if(i % 7 == 0 || (g == 7 || s == 7)) {
System.out.print(i);
System.out.print("\t");
}
i++;
}
2.3.2 do...while循环 (了解)
语法规则
do{
重复执行的代码
}while(逻辑表达式);
例如:
public class MainMenu {
/**
* 升级菜单切换
*/
public static void main(String[] args) {
System.out.println("欢迎使用MyShopping管理系统\n");
System.out.println("*******************************");
System.out.println("\t1.客 户 信 息 管 理");
System.out.println("\t2.购 物 结 算");
System.out.println("\t3.真 情 回 馈");
System.out.println("\t4.注 销");
System.out.println("*******************************\n");
int choice; //用户选择
boolean isRight; //输入是否正确
System.out.print("请选择,输入数字:");
Scanner input = new Scanner(System.in);
do{
isRight = true;
choice = input.nextInt();
if(choice == 1){
System.out.println("执行客户信息管理");
}else if(choice == 2){
System.out.println("执行购物结算");
}else if(choice == 3){
System.out.println("执行真情回馈");
}else if(choice == 4){
System.out.println("执行注销");
}else{
System.out.print("输入错误,请重新输入数字:");
isRight = false;
}
}while(!isRight);
System.out.println("\n程序结束");
}
}
while与do...while的区别
while循环,先判断,再尝试执行。可能一次都不执行。
do...while循环,先执行,再判断。至少执行一次
2.4 循环的控制
2.4.1 继续(轮空) continue
某些情况下,我们希望多轮循环中,某轮循环轮空,使用continue
示例3: 打印[1,10]的所有整数,不包括能被3整除的数字
for(int i = 1; i <= 10; i++) {
if(i % 3 == 0) {
continue;
}
System.out.println(i);
}
2.4.2 中断(结束) break
某些情况下,我们希望循环在中途结束整个循环
示例4: 打印[1,10]的所有整数,直到遇到第一个能被3整除的数字
for(int i = 1; i <= 10; i++) {
if(i % 3 == 0) {
break;
}
System.out.println(i);
}
continue与break的区别?
continue:结束该轮循环,继续执行下一轮循环
break: 结束整个循环
2.4.3 循环嵌套
当两个循环发生嵌套关系时
外部循环i执行1轮,内部循环j完整地执行了5轮
for(int i = 1; i <= 3; i++) {
for(int j = 1; j <= 5; j++) {
System.out.println(i+"\t"+j);
}
}
2.4.4 死循环
当循环无法自动执行完毕,无限执行时,程序就是死循环
while(true){
}
上述代码之后,编写任何其他代码都会报错
综合题目
模拟注册登录幸运抽奖全过程
主要功能
1.注册 2.登录 3.幸运抽奖
实现菜单的输出显示
实现循环执行功能
实现注册功能
需求说明
输入用户名和密码,系统产生4位随机数作为卡号。
注册成功,显示注册信息并修改注册标识为true
实现登录功能
需求说明
输入注册时的用户名和密码,登录成功,系统提示欢迎信息
如果用户名和密码输入错误,提示用户继续输入,最多有3次输入机会