选择结构

用于选择和判断

A.if结构

a.简单if

int money=10;
if(money>100){
	System.out.println("买兰博基尼");
}
int money=10;
if(money>100){
	System.out.println("买兰博基尼");
}else {
	System.out.println("没有钱,坐公交车");
}
Scanner input=new Scanner(System.in);
double zhekou;//折扣
System.out.print("请输入您的性别:");
String sex=input.next();
if("男".equals(sex)){
//根据性别来判断折扣
	zhekou=0.8;
}else {
	zhekou=0.5;
}
System.out.println("您的折扣是:"+zhekou+"折!");
}
Scanner input=new Scanner(System.in);
double zhekou;//折扣
System.out.print("请输入您的性别:");
char sex=input.next().charAt(0);//charAt是根据索引取到字符串第几个字符
if(sex=='男'){
//根据性别来判断折扣
	zhekou=0.8;
}else {
	zhekou=0.5;
}
System.out.println("您的折扣是:"+zhekou+"折!");
/**
* 简单if结构
* 输入语文和数学的成绩
* 如果语文大于95并且数学大于90分,奖励劳斯莱斯一辆
* 或者语文100分并且数学大于80分,也奖励劳斯莱斯一辆
*
*/
public class Test5 {
	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		System.out.print("请输入语文成绩:");
		int yuwen=input.nextInt();
		System.out.print("请输入数学成绩:");
		int shuxue=input.nextInt();
        
		if((yuwen>=95&&shuxue>=90)||(yuwen==100&&shuxue>=80)){
			System.out.println("奖励劳斯莱斯一辆!");
		}else {
		System.out.println("抱歉,不奖励!");
		}
	}
}

b.多重if

/**
* 多重if结构,有多种选择但是选择一种
* 输入语文成绩
* 如果大于90分,奖励兰博基尼一台
* 如果大于80分,奖励奔驰S一台
* 如果大于60分,奖励宝马5系一台
* 如果不及格,不奖励
*
*/
public class Test6 {
	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		System.out.print("请输入语文成绩:");
		int yuwen=input.nextInt();
        
		if(yuwen>=90) {
			System.out.println("奖励兰博基尼一台!");
		} else if(yuwen>=80) {
			System.out.println("奖励奔驰S一台一台!");
		}else if(yuwen>=60) {
			System.out.println("奖励宝马5系一台!");
		}else {
			System.out.println("不及格,不奖励");
		}
	}
}
/**
* 多重if结构,用于多种选择
* 多重if结构可用于区间判断,也可以用于等值判断
*/
public class Test7 {
	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		String foodName;//食物
		System.out.print("请输入星期:");
		int week=input.nextInt();
        
		if(week==1){
			foodName="肯德基";
		}else if (week==2||week==3) {
			foodName="必胜客";
		}else if (week==4) {
			foodName="德克士";
		}else if (week==5) {
			foodName="华莱士";
		}else {
			foodName="泡面";
		}
		System.out.println("吃:"+foodName);
	}
}

c.嵌套if

/**
*
* 嵌套if结构
*
*/
public class Test8 {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		String foodName = "";// 食物
		System.out.print("请输入星期:");
		int week = input.nextInt();
        
		if (week >= 1 && week <= 7) {
			if (week == 1) {
				foodName = "肯德基";
			} else if (week == 2 || week == 3) {
				foodName = "必胜客";
			} else if (week == 4) {
				foodName = "德克士";
			} else if (week == 5) {
				foodName = "华莱士";
			} else {
				foodName = "泡面";
			}
			System.out.println("吃:" + foodName);
		} else {
		System.out.println("抱歉,只能输入1-7之间的整数!");
		}
	}
}

B.switch结构

==switch也能用于多重选择,但是switch只能用于等值判断,不能用于区间判断==

public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		System.out.println("输入星期:");
		int days=input.nextInt();
		String food = null;
		
		switch (days) {
			case 1:
				food="KFC";
				break;	
			case 2:
			case 3:
				food="BSK";
				break;
			case 4:
				food="DKS";
				break;
			case 5:
				food="饺子";
				break;
			case 6:
			case 7:
				food="泡面";
				break;
			default:
				break;
		}
		System.out.println("吃:"+food);
		input.close();
	}
public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		System.out.println("输入星期:");
		int days=input.nextInt();
		String food = null;
		
		if(days>7||days<1) {
			System.out.println("error");
		}else {
			switch (days) {
			case 1:
				food="KFC";
				break;
				
			case 2:
			case 3:
				food="BSK";
				break;
			
			case 4:
				food="DKS";
				break;
			
			case 5:
				food="饺子";
				break;
				
			case 6:
			case 7:
				food="泡面";
				break;
			
			default:
				break;
			}
			System.out.println("吃:"+food);
		}
		
		input.close();
	}

C.上机作业

*************中兴爱买不买购物超市系统***********
1.帽子 2.T恤 3.裤衩
10¥ 15¥ 30¥
请输入编号选择商品:2
请选择购买的数量:5
您购买的商品:T恤,金额是:75
请输入支付的金额:100
找零:25
import java.util.Scanner;

public class Test8 {
	public static void main(String[] args) {
		Scanner input =new Scanner(System.in);
		System.out.println("********超市********");
		System.out.println("1.帽子\t2.T恤\t3.羽绒服");
		System.out.println("10¥\t15¥\t40¥");
		System.out.println("请输入要购买的的商品编码:");
		int bianMa=input.nextInt();
		String shangPin=null;
		int price=0;
		
		if(bianMa>=1&&bianMa<=3) {
			if (bianMa==1) {
				shangPin="帽子";
				price=10;
			} else if (bianMa==2) {
				shangPin="T恤";
				price=15;
			} else {
				shangPin="羽绒服";
				price=40;
			}
			System.out.println("您选中的的商品为:"+shangPin+"此商品的单价为:"+price);
			System.out.println("请输入你要购买的数量:");
			int count=input.nextInt();
			int total=0;
			total=count*price;
			System.out.println("您需要支付的金额:"+total);
			System.out.println("您支付的金额:");
			int money=input.nextInt();
			int retuenMoney=money-total;
			if (retuenMoney>0) {
				System.out.println(retuenMoney);
			}else {
				System.out.println("金额不足");
			}
			if(total>1000) {
				int lucknum=(int) (Math.random()*10)+1;
				System.out.println(lucknum);
				if (lucknum>5&&lucknum<=8) {
					System.out.println("恭喜获得三等奖:垃圾桶10个");
				} else if(lucknum>8&&lucknum<=9){
					System.out.println("恭喜获得二等奖:冰箱一台");
				}else if(lucknum==10){
					System.out.println("恭喜获得一等奖:洗衣机一台");
				}else {
					System.out.println("恭喜获得安慰奖:抽纸10包");
				}
			}else {
				System.out.println("无法参与抽奖");
			}
		}else {
			System.out.println("请输入正确的商品编码:");
		}
		input.close();
	}
}

D.代码调试

我们可以通过调试模式让原本自动执行的代码按原本的执行轨迹不变,变成手动一行一行的去执行,就可以看到代码执行,也能看到程序的漏洞。
    1.可以看到代码一步步的执行
    2.

循环结构

A.定义

循环:在特定的条件下重复做一件事

B.循环分类

1.while循环

先判断,后执行;先判断条件是否满足,如果满足为true,就继续执行
while(布尔表达式){
    //循环内容
}

只要布尔表达式为true,循环体会一直执行下去。

public class Test {
    public static void main(String args[]) {
    int x = 10;
        while( x < 20 ) {          
          System.out.print("value of x : " + x );          	           x++;
          System.out.print("\n");       
        }    
    } 
} 

2.do-while循环

对于while语句而言,如果不满足条件,则不能进入循环。但有时候我们需要即使不满足条件,也至少执行一次。

do…while循环和while循环相似,不同的是,do…while循环至少会执行一次。
do {
       //代码语句
}while(布尔表达式);

注意:布尔表达式在循环体的后面,所以语句块在检测布尔表达式之前已经执行了。 如果布尔表达式的值为true,则语句块一直执行,直到布尔表达式的值为false。

public class Test {

   public static void main(String args[]){
      int x = 10;

      do{
         System.out.print("value of x : " + x );
         x++;
         System.out.print("\n");
      }while( x < 20 );    } } 

3.for循环

虽然所有循环结构都可以用while或者do...while表示,但Java提供了另一种语句 —— for循环,使一些循环结构变得更加简单。

for循环执行的次数是在执行前就确定的。语法格式如下:
for(初始化; 布尔表达式; 更新) {
    //代码语句
}

关于for循环有以下几点说明:

  • 最先执行初始化步骤。可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。
  • 然后,检测布尔表达式的值。如果为true,循环体被执行。如果为false,循环终止,开始执行循环体后面的语句。
  • 执行一次循环后,更新循环控制变量。
  • 再次检测布尔表达式。循环执行上面的过程。

4.加强for循环

Java5引入了一种主要用于数组的增强型for循环。

Java增强for循环语法格式如下:
for(声明语句 : 表达式)
{
   //代码句子
}
声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。

表达式:表达式是要访问的数组名,或者是返回值为数组的方法。

C.关键字

1.break关键字

reak主要用在循环语句或者switch语句中,用来跳出整个语句块。

break跳出最里层的循环,并且继续执行该循环下面的语句。
public class Test {

   public static void main(String args[]) {
      int [] numbers = {10, 20, 30, 40, 50};

      for(int x : numbers ) {
         if( x == 30 ) {
	      break;
         }
         System.out.print( x );
         System.out.print("\n");
      }
   }
}

2.continue关键字

continue适用于任何循环控制结构中。作用是让程序立刻跳转到下一次循环的迭代。

在for循环中,continue语句使程序立即跳转到更新语句。

在while或者do…while循环中,程序立即跳转到布尔表达式的判断语句。
public class Test {

   public static void main(String args[]) {
      int [] numbers = {10, 20, 30, 40, 50};

      for(int x : numbers ) {
         if( x == 30 ) {
	      continue;
         }
         System.out.print( x );
         System.out.print("\n");
      }
   }
}

3.return

return作为方法的返回值

public String getName() { return name; }

D.i++和++i的区别

int a=5; 
int b=a+++1;//先运算再自增,b结果是6 
int c=++a+1;//先自增再运算,c结果是7 
System.out.println("b:"+b+",c:"+c);