java--第五章:java语言基础4

1 switch语句

switch语句格式:

switch(表达式){

    case 值1:

        语句体1;

        break;

    case 值1:

        语句体1;

        break;

    ...

    default:

        语句体n+1;

        break;

}

switch:表示这是switch选择结构

     表达式:这个地方的取值是有限定的byte,short,int,char

     JDK5以后可以是枚举,JDK7以后是string

case:后面跟的是要和表达式进行比较的值

语句体部分可以是一条语句或者多条语句

break表示中断,结束的意思,可以结束switch语句

default语句表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似

执行流程:

首先计算出表达式的值,其次,和case依次进行比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。最后,如果所有的case都和表达式的值不匹配,就会执行default语句部分,然后程序结束。

/*
   byte可以作为swtich的表达式吗?可以
   long可以作为swtich的表达式吗?不可以
   string可以作为swtich的表达式吗?JDK7以后可以
   
   案例:键盘录入一个数据,根据这个数据,我们输出对应的星期?
   注意:遇到左大括缩进一个tab的位置;关联不是很大的语句间进行空行
*/
import java.util.Scanner;

class SwitchDemo{
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		
		System.out.println("请输入一个数据(1-7):");
		int week = sc.nextInt();
		
		switch(week){
			case 1:
				System.out.println("星期一");
				break;
			case 2:
				System.out.println("星期二");
				break;
			case 3:
				System.out.println("星期三");
				break;
			case 4:
				System.out.println("星期四");
				break;
			case 5:
				System.out.println("星期五");
				break;
			case 6:
				System.out.println("星期六");
				break;
			case 7:
				System.out.println("星期日");
				break;
			default:
				System.out.println("你输入的数据有误");
				break;
		}
	}
}

注意事项:

A:case后面只能是常量,不能是变量,而且多个case后面的值不能出现相同的。

B:default可以省略吗?可以省略,但是一般不建议。除非判断的值是固定的(单选题)。

C:break可以省略吗?可以省略,但是一般不建议。否则结果可能不是你想要的,会出现一个case穿透的现象。

D:deault的位置一定要在最后吗?可以出现在switch语句任何位置,但是建议在最后。

E: switch语句结束条件:遇到break;执行到程序的末尾。

/int number = 3;
		//把case后面的值改成number会报错
		
		switch(week){
			case 1:
				System.out.println("星期一");
				break;
			case 2:
				System.out.println("星期二");
				break;
			case 3:
				System.out.println("星期三");
				break;
			case 4:
				System.out.println("星期四");
				break;
			case 5:
				System.out.println("星期五");
				break;
			case 6:
				System.out.println("星期六");
				break;
			case 7:
				System.out.println("星期日");
				break;
			default:
				System.out.println("你输入的数据有误");
				break;
		}

练习1:看程序写结果

class SwitchDemo2{
	public static void main(String[] args){
		int x = 2;
		int y = 3;
		switch (x){
			default:
				y++;
				break;
			case 3:
				y++;
			case 4:
				y++;
		}
		System.out.println("y="+y);//4
		/*
		  先走case,但是case里没有符合的,所以走default,y++变成了4,break就结束了。
		*/
		
		
		int a = 2;
		int b = 3;
		switch (a){
			default:
				b++;
			case 3:
				b++;
			case 4:
				b++;
		}
		System.out.println("b="+b);//6
		/*
		  先走case,但是case里没有符合的,所以走default,y++变成了4,没有break,不能结束
		  于是就得走到结尾结束,y++,y++,变成了6.
		*/
	}
}

练习2:单项选择

/*
  练习:做单项选择题,根据你的选择,给出对应的答案。(表达式是字符的情况)
*/
import java.util.Scanner;

class SwitchDemo3{
	public static void main(String[] args){
		System.out.println("下面的几个人你最爱谁?");
		//由于现在没有办法键盘录入得到一个a,b这样的东西,我们就用65,66这样的值替代
		System.out.println("65 苑海洋");
		System.out.println("66 男的");
		System.out.println("67 女的");
		System.out.println("68 人妖");
		
		Scanner sc=new Scanner(System.in);
		
		System.out.println("请输入你的选择:");
		int choiceNumber = sc.nextInt();
		
		char choice =(char) choiceNumber;
		
		switch (choice){
			case 'A':
				System.out.println("恭喜你,选择正确");
				break;
			case 'B':
				System.out.println("选择有误");
				break;
			case 'C':
				System.out.println("选择有误");
				break;
			case 'D':
				System.out.println("选择有误");
				break;
			default:
				System.out.println("没有该选项");
				break;
		}
		
	}
}

练习3:表达式是字符串

/*
  练习:键盘录入字符串,判断是否有满足要求的,如果有就输出,否则,提示错误。
  
  String s=sc.nextLine();拿的是字符串类型
*/
import java.util.Scanner;

class SwitchDemo4{
	public static void main(String[] args){
		Scanner sc=new Scanner(System.in);
		
		System.out.println("请输入你要判断的字符串:");
		String s = sc.nextLine();
		
		switch (s){
			case "hello":
				System.out.println("你输入的是hello");
				break;
			case "world":
				System.out.println("你输入的是world");
				break;
			case "java":
				System.out.println("你输入的是java");
				break;
			default:
				System.out.println("没有找到你输入的数据");
				break;
		} 
	}
}

switch和if语句的各自使用场景:

 if语句的使用场景:

A:针对结果是布尔类型的判断(switch不可以)

B:针对一个范围的范围(switch不可以)

C:针对几个常量值的判断

switch语句的使用场景:

针对几个常量值的判断

/*
  用switch语句实现键盘录入月份,输出对应的季节
*/
import java.util.Scanner;

class SwitchDemo5{
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
		
		System.out.println("请输入一个月份:");
		int month = sc.nextInt();
		
		/*
		switch (month){
			case 1:
				System.out.println("冬季");
				break;
			case 2:
				System.out.println("冬季");
				break;
			case 3:
				System.out.println("春季");
				break;
			case 4:
				System.out.println("春季");
				break;
			case 5:
				System.out.println("春季");
				break;
			case 6:
				System.out.println("夏季");
				break;
			case 7:
				System.out.println("夏季");
				break;
			case 8:
				System.out.println("夏季");
				break;
			case 9:
				System.out.println("秋季");
				break;
			case 10:
				System.out.println("秋季");
				break;
			case 11:
				System.out.println("秋季");
				break;
			case 12:
				System.out.println("冬季");
				break;
			default:
				System.out.println("您输入的数据有误");
				break;
		}
		*/
		
		//这样写太麻烦了,我们使用一个case穿透
		switch (month){
			case 1:
			case 2:
			case 12:
				System.out.println("冬季");
				break;
			case 3:
			case 4:
			case 5:
				System.out.println("春季");
				break;
			case 6:
			case 7:
			case 8:
				System.out.println("夏季");
				break;
			case 9:
			case 10:
			case 11:
				System.out.println("秋季");
				break;
			default:
				System.out.println("您输入的数据有误");
				break;
		}
	}
}

 

2 循环结构概述

循环语句可以在满足循环条件的前提下,反复执行某一段代码,这段被重复执行的代码称为循环体语句。当反复执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循环将一直执行下去,形成死循环。

循环语句:for循环,while循环和do...while循环

循环语句的组成:

A:初始化语句:一条或者多条语句,这些语句完成一些初始化操作。

B:判断条件语句:这是一个布尔表达式,这个表达式能决定是否执行循环体。

C:循环体语句:这个部分是循环体语句,也是我们多次要做的事情。

D:控制条件语句:这个部分在一次循环体结束之后,下一次循环判断条件执行前执行。通过用户控制循环条件中的变量,使得循环在合适的时候结束。

 

3 循环结构for语句

for循环语句的格式:

for(初始化语句;判断条件语句;控制条件语句){

        循环体语句;

}

//在控制台输出10次"helloworld"

class ForDemo{
	public static void main(String[] args){
		for(int x=1;x<=10;x++){
			System.out.println("helloworld");
		}
	}
}

注意事项:

A:判断条件语句的结果是一个boolean类型

B:循环体语句如果是一条语句,大括号可以省略;如果是多条语句,大括号不能省略。建议永远不要省略。

C:一般来说,有左大括号就没有分号,有分号就没有左大括号

练习1:请在控制台输出数据1-10

/请在控制台输出数据1-10

class ForTest1{
	public static void main(String[] args){
		for(int x=0;x<10;x++){
			System.out.println(x+1);
		}
	}
}

练习2:求和

//求1-10的数据和

class ForTest2{
	public static void main(String[] args){
	    int sum = 0;
		
		for(int x=1;x<=10;x++){
			sum += x;
		}
		
		System.out.println("sum="+sum);
	}
}

练习3:求偶数和

//求1-100偶数和

class ForTest3{
	public static void main(String[] args){
		int sum = 0;
		
		//方式1
		/*
		for(int x=1;x<=100;x++){
			if(x%2==0){
				sum += x;
			}
		}
		*/
		
		//方式2
		for(int x=0;x<=100;x+=2){
			sum += x;
		}
		
		System.out.println("sum="+sum);
	}
}

练习4:阶乘

/*
  求5的阶乘
  什么是阶乘呢?
    n!=n*(n-1)(n-2)*...*3*2*1;
	
*/

class ForTest4{
	public static void main(String[] args){
		int jc=1;
		
		for(int x=1;x<=5;x++){
			jc *= x;
		}
		
		System.out.println(jc);
	}
}

练习5:水仙花

/*
  需求:在控制台输出所有的"水仙花数"
  
  何为"水仙花数"?
  水仙花数就是指一个三位数,其各位数字的立方和等于该数本身。
  比如153=1*1*1 + 5*5*5 + 3*3*3
  
  三位数是告诉了我们范围,
  麻烦的是吧如何获取这个三位数的个,十,百位上的数据
  
  假设有个数据:153
  ge:153%10 = 3
  shi:153/10%10 = 5
  bai:153/100%10 = 1
  
  让 ge*ge*ge + shi*shi*shi + bai*bai*bai 和该数据比较
  如果相同,就把该数据在控制台输出  
*/

class ForTest5{
	public static void main(String[] args){
		for(int x=100;x<1000;x++){
			int ge = x%10;
			int shi = x/10%10;
			int bai = x/100%10;
			
			if(x == (ge*ge*ge + shi*shi*shi + bai*bai*bai)){
				System.out.println(x);
			}
		}
	}
}

练习6:改进版的回文数

/*
   请在控制台输出满足如下条件的五位数
   个位等于万位
   十位等于千位
   个位+十位+千位+万位=百位
   
*/

class ForTest6{
	public static void main(String[] args){
		for(int x=10000;x<100000;x++){
			int ge = x%10;
			int shi = x/10%10;
			int bai = x/100%10;
			int qian = x/1000%10;
			int wan = x/10000%10;
			
			if(ge==wan && shi==qian && (ge+shi+qian+wan)==bai){
				System.out.println(x);
			}
		}
	}
}

练习7:统计思想

//统计水仙花数有多少个

class ForTest7{
	public static void main(String[] args){
		int count = 0;
		
		for(int x=100;x<1000;x++){
			int ge=x%10;
			int shi=x/10%10;
			int bai=x/100%10;
			
			if(x==(ge*ge*ge + shi*shi*shi + bai*bai*bai)){
				count++;
			}
		}
		
		System.out.println(count);
	}
}

练习8:同时取余

/*
  统计1-1000之间同时满足如下条件的数据有多少个:
      对3整除余2 x%3==2
	  对5整除余3 x%5==3
	  对7整除余2 x%7==2
*/

class ForTest8{
	public static void main(String[] args){
		int count = 0;
		
		for(int x=1;x<=1000;x++){
			if(x%3==2 && x%5==3 && x%7==2){
				count++;
			}
		}
		
		System.out.println(count);
	}
}

4 循环结构while语句

基本格式:

while(判断条件语句){

     循环体语句;

}

扩展格式:

初始化语句;

while(判断条件语句){

     循环体语句;

     控制条件语句;

}

class WhileDemo{
	public static void main(String[] args){
		//输出10次"helloworld"
		int x = 0;
		while(x<10){
			System.out.println("helloworld");
			x++;
		}
	}
}

练习1:求和

//求出1-100之和

class WhileTest1{
	public static void main(String[] args){
		//for
		int sum=0;
		for(int x=1;x<=100;x++){
			sum += x;
		}
		System.out.println(sum);
		
		//while
		int sum2 = 0;
		int y=1;
		
		while(y<=100){
			sum2 += y;
			y++;
		}
		
		System.out.println(sum2);
	}
}

练习2:统计

//统计水仙花个数有多少个

class WhileTest2{
	public static void main(String[] args){
		//for
	    int count=0;
		
		for(int x=100;x<1000;x++){
			int ge=x%10;
			int shi=x/10%10;
			int bai=x/100%10;
			
			if(x == (ge*ge*ge + shi*shi*shi + bai*bai*bai)){
				count++;
			}
		}
		System.out.println(count);//4
		
		//while
		int count2=0;
		
		int y=100;
		while(y<1000){
			int ge=y%10;
			int shi=y/10%10;
			int bai=y/100%10;
			
			if(y == (ge*ge*ge + shi*shi*shi + bai*bai*bai)){
				count2++;
			}
			y++;
		}
		System.out.println(count);//4
	}
}

while和for循环的区别

使用区别:如果你想在结束循环之后,继续使用控制条件的那个变量,用while循环。否则就用for循环。

                  因为变量及早的从内存中消失,可以提高内存的使用率。

理解:其实还有一种常见的场景

如果是一个范围的,用for循环非常明确;如果是不明确要用多少次,用while循环较为合适

class WhileTest3{
	public static void main(String[] args){
		//for循环实现
		for(int x=0;x<10;x++){
			System.out.println("i love you");
		}
		//这里不能再继续访问x了
		//System.out.println(x);//报错
		
		//while实现
		int y=0;
		while(y<10){
			System.out.println("i love you");
			y++;
		}
		//这里可以继续访问y
		System.out.println(y);
	}
}

练习3:珠穆朗玛峰

/*
 我国最高山峰是珠穆朗玛峰:8848米。我现在有一张足够大的纸,厚度为:0.01m.
 请问,折叠多少次,就可以保证厚度不低于珠穆朗玛峰的高度?
 
 0.01初始厚度
 8848最终厚度
 折叠一次效果:厚度是以前的2倍
*/

class WhileTest4{
	public static void main(String[] args){
		int count = 0;
		
		//为了简单,把0.01变成1,8848就变成884800
		int end = 884800;
		int start = 1;
		
		while(start<end){
			count++;
			start *= 2;
			
			//System.out.println(start);
		}
		System.out.println(count);
	}
}

5 循环结构do...while语句

基本格式:

do{

    循环体语句;

}while(判断条件语句);

扩展格式:

初始化语句;

do{

    循环体语句;

    控制条件语句;

}while(判断条件语句);

class DoWhileDemo{
	public static void main(String[] args){
		int x=0;
		
		do{
			System.out.println("helloworld");
			x++;
		}while(x<10);
		
		//求和1-100
		int sum=0;
		
		int a=0;
		do{
			sum += a;
			a++;
		}while(a<=100);
		
		System.out.println(sum);
	}
}

6 循环结构的总结

三种循环的区别:

do...while至少执行一次,

而for,while必须先判断条件是否成立,然后决定是否执行循环体语句。

那一般使用哪种循环呢?优先考虑for,其次考虑while,最后考虑do...while

class XunHuan1{
	public static void main(String[] args){
		int x=3;
		
		while(x<3){
			System.out.println("x<3");//没有执行
			x++;
		}
		
		int y=3;
		do{
			System.out.println("x<3");//执行了
			x++;
		}while(y<3);
	}
}

死循环:

A:一定要注意控制条件语句控制的的那个变量的问题,不要弄丢了,否则就变成了死循环。

B:两种最简单的死循环格式:

     while(true){...}

     for(;;){...}

class XunHuan2{
	public static void main(String[] args){
		int x=0;
		while(x<10){
			System.out.println(x);
			x++;//没有这句话就变成了死循环
		}
		
		//死循环的第一种格式
		/*
		while(true){
			System.out.println("xuexi");
		}
		*/
		
		//死循环的第二种格式
		/*
		for(;;){
			System.out.println("xuexi");
		}
		*/
	}
}

循环嵌套

外循环控制行数,内循环控制列数

/*
  请输出一个四行五列的星星图案
  结果:
      *****
	  *****
	  *****
	  *****
*/

class XunHuan3{
	public static void main(String[] args){
		//输出语句的另一种格式:System.out.print("*");这个不带换行
		//我们可以通过空的输出语句实现换行:System.out.println();
		for(int y=1;y<5;y++){
			for(int x=0;x<5;x++){
				System.out.print("*");
			}
			System.out.println();
		}
		
	}
}

练习:输出正三角形

/*输出正三角形
  *
  **
  ***
  ****
  *****
  
  行:5
  列:变化
  第一行:1列 y=0;y<=0;y++
  第二行:2列 y=0;y<=1;y++
  第三行:3列 y=0;y<=2;y++
  第四行:4列 y=0;y<=3;y++
  第五行:5列 y=0;y<=4;y++
*/

class XunHuan4{
	public static void main(String[] args){
		//先输出一个5行5列的
		for(int x=0;x<5;x++){
			for(int y=0;y<5;y++){
				System.out.print("*");
			}
			System.out.println();
		}
		
		//输出正三角形
		for(int x=0;x<5;x++){
			for(int y=0;y<=x;y++){
				System.out.print("*");
			}
			System.out.println();
		}
	}
}

练习:九九乘法表

/*
  输出一个九九乘法表
  1*1=1
  1*2=2  2*2=4
  1*3=3  2*3=6  3*3=9
  ...
  1*9=9  2*9=18  3*9=27...
  
  '\x' x表示任意,这种做法就转义字符
  
  '\t' tab键的位置
  '\r' 回车
  ''n' 换行
  
*/

class XunHuan5{
	public static void main(String[] args){
		for(int x=1;x<=9;x++){
			for(int y=1;y<=x;y++){
				System.out.print(y+"*"+x+"="+y*x+"\t");
			}
			System.out.println();
		}
	}
}

 

7 控制跳转语句:

java提供了break,continue,return来实现控制语句的跳转和中断

break:中断

continue:继续

return:返回

break

break的使用场景:①在选择结构switch中;②在循环语句中(一般是加入了if判断)

                               离开这两个场景没有意义

break的作用:跳出单层循环;跳出多层循环

                       带标签的跳出;格式:标签名:循环语句

class XunHuan6{
	public static void main(String[] args){
		//不能独立使用,在switch或loop外部中断
		//break;
		
		//跳出单层循环
		for(int x=0;x<10;x++){
			if(x==2){
				break;//仅仅表示退出当前循环
			}
			System.out.println("helloworld");
		}
		
		//跳出多层循环
		/*
		for(int x=0;x<3;x++){
			for(int y=0;y<4;y++){
				if(y==2){
					break;
				}
				System.out.print("*");
			}
			System.out.println();
		}
		*/
		
		//标签名
		wc:for(int x=0;x<3;x++){
			nc:for(int y=0;y<4;y++){
				if(y==2){
					break wc;
				}
				System.out.print("*");
			}
			System.out.println();
		}
	}
}

continue:

使用场景:在循环语句中

作用:单层循环对比break,然后总结两个的区别

            break退出当前循环;continue退出一次循环,进入下一次的执行

/*
   练习:
   for(int x=0;x<=10;x++){
	   if(x%3==0){
		   //在此处填写代码
	   }
	   System.out.println("aaa");
   }
   
   在控制台输出2次"aaa"
        break;
   在控制台输出7次"aaa"
        continue;
   在控制台输出13次"aaa"
        System.out.println("aaa");
   
*/

class XunHuan7{
	public static void main(String[] args){
		/*
		for(int x=0;x<10;x++){
			if(x==3){
				//break;0,1,2
				continue;//0,1,2,4,5,6,7,8,9没有3
			}
			System.out.println(x);
		}
		*/
		
		for(int x=1;x<=10;x++){
		   if(x%3==0){
			   //在此处填写代码
		   }
		   System.out.println("aaa");
	   }
	}
}

return

不是结束循环,而是结束方法。退出一个方法,跳转到上层调用的方法。

结束循环其实就是就是结束了main方法

class XunHuan8{
	public static void main(String[] args){
		for(int x=0;x<10;x++){
			if(x==2){
				System.out.println("退出");
				//break;//0,1,退出,over
				//continue;//0,1,退出,3,4,5,6,7,8,9,over
				return;//0,1,退出
			}
			System.out.println(x);
		}
		System.out.println("over");
	}
}

练习:小芳存钱

/*
   需求:
       小芳的妈妈每天给她2.5元钱,她都会存起来。
       但是,每当这一天是存钱的第5天或者5的倍数时,她都会花去6元钱。
       请问,经过多少天,小芳才可以存到100元钱。
	   
   分析:1 每天2.5
           double dayMoney=2.5;
         2 她都存起来
		   double daySum=0;
		 3 从第一天开始存
		   int dayCount=1;
		 4 结果不小于100
		   double result=100;
		 5 如果被5整除,就减去6元钱
		   daySum -= 6;
		   如果不能被5整除,每天要累加2.5
		   daySum += 2.5;
		 6 因为不知道是多少天,所以用死循环,一旦超过100元就退出循环
*/

class XunHuan9{
	public static void main(String[] args){
		double dayMoney=2.5;
		double daySum=0;
		int dayCount=1;
		double result=100;
		
		while(true){
			daySum+=dayMoney;
			
			if(daySum>=result){
				System.out.println(dayCount);
				break;
			}
			
			if(dayCount%5==0){
				daySum -= 6;
				System.out.println("第"+dayCount+"天花了6元钱");
			}
			
			dayCount++;
		}
	}
}
发布了110 篇原创文章 · 获赞 9 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Lemontree_fu/article/details/102624501