java入门基础三(执行语句)

6. Scanner类(简单介绍)

作用:获取用户的输入。(使用前需要导包 :import java.util.Scanner;)

常用方法:

  1. next() /nextLine() :获取到一个输入的String字符串。
  2. nextInt() / nextDouble()/nextFloat() … :获取到输入的对应类型数值

注:next() 与 nextLine() 区别

next():

  1. 一定要读取到有效字符后才可以结束输入。
  2. 对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。
  3. 只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
  4. next() 不能得到带有空格的字符串。

nextLine():

​ 以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符,即可以获得空白。

示例:

Scanner sc =new Scanner(System.in);
System.out.println("输入姓名:");
String name = sc.next();
System.out.println("输入数学成绩");
double math = sc.nextDouble();

7. java执行语句

7.1 顺序语句

方法中的代码从上往下执行(java程序从宏观上来看,都为顺序执行,自上而下)

7.2 分支语句

7.2.1 if分支

简单if分支

语法结构:
if(表达式){
…代码块…
}
理解:表达式的结果必须是boolean类型
true - 执行代码块
false - 跳出if分支

示例:

if(false){
	System.out.println("...代码块...");
}
System.out.println("if分支以外的代码");
if else 分支

语法结构:
if(表达式){
…代码块…
}else{
…else代码块…
}
理解:
表达式的结果必须是boolean
true - 执行代码块
false- 执行else代码块

示例:

if(false){
	System.out.println("...代码块...");
}else{
	System.out.println("...else代码块...");
}
System.out.println("if分支以外的代码");

注:else使用必须和if一一对应,不能单独使用

if else if 分支

语法结构:
if(表达式1){
…代码块1…
}else if(表达式2){
…代码块2…
}else if(表达式n){
…代码块n…
}else{
…else代码块…
}

理解:
表达式的结果必须是boolean
从上往下依次判断表达式,哪个表达式先为true,就执行对应的代码块
所有的表达式都不为true,就执行else代码块
注意:else{}根据需求可写可不写

示例:

if(false){
 System.out.println("...代码块1...");
}else if(false){
 System.out.println("...代码块2...");
}else if(false){
 System.out.println("...代码块n...");
}else{   //最后的else可有可无,当所有条件不满足时,执行。
 System.out.println("...else代码块...");
}
System.out.println("if分支以外的代码");
if 嵌套

根据实际需要,if语句可以在程序中无限嵌套,语法规则按照上述三种即可。

示例:

if(true){
	System.out.println("第一个if代码块");
	if(true){
		System.out.println("第二个if代码块");
	}else if(true){ 
		System.out.println("第三个if代码块");
	}else{
		//
	}
}else if(false){
	//
}else{
	//
}

7.2.2 switch分支

switch基础

语法结构:
switch(表达式){
case 值1:
…代码块1…
break;
case 值2:
…代码块2…
break;
case 值n:
…代码块n…
break;
default:
…default代码块…
break;
}

理解:
表达式的结果可以是:byte、short、int、枚举(JDK1.5)、String(JDK1.7)
分别和值1、值2、值n比较,比较结果相等,开始执行case后对应的代码块,break代表跳出switch分支语句,即switch结束,如果不在代码块后加break,程序将会从当前case开始依次执行,直到结束或遇到break。
default代码块类似于else{},代表否则,根据需求可写可不写,所在位置也非固定在switch结构最后。

示例:

Scanner sc =new Scanner(System.in);
System.out.println("输入一个数学成绩");
String math = sc.next();
switch(math)
{
	case "90":
		System.out.println("优秀");
	break;
	case "80":
		System.out.println("优良");
	break;
	case "70":
		System.out.println("良好");
	break;
	case "60":
		System.out.println("及格");
	break;
	default:
		System.out.println("不合格");
	break;
}
if和switch
  1. if的表达式结果必须为boolean类型,而switch的表达式有多种(byte,short,int,枚举,String)
  2. if能够判断单个值,区间以及复杂的条件,而switch只能判断单个值,但结构清晰,比较方便,更加易读。
重点注意
  1. case的值绝对不能相等。
  2. default,break 可以省略,但会改变代码逻辑,且case后也可以直接跟case,表示多种情况都是执行同一代码块。

示例(判断输入月份的季节):

switch(month){
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;
case 12:case 1:case 2:
	System.out.println("冬");
	break;
}
  1. case后面的值类型可以不一样,但必须要兼容,如char和int

示例:

switch('a')// 'a'的ASCII码为97
		{
			case 97:
				System.out.println("case为97的代码块");
			break;
			case 'b':
				System.out.println("case为98的代码块");
			break;
			default:
				System.out.println("default的代码块");
			break;
		}
//输出结果为 case为97的代码块
  1. switch表达式的类型为什么只有byte、short、int、枚举(JDK1.5)、String(JDK1.7)?
    switch表达式的结果在底层只接受int
    byte自动转型成int
    short自动转型成int
    枚举的对象系统会给他赋int值
    String是获取的ASCII码

7.3 循环语句

7.3.1 for循环

for基础

语法结构:
for(表达式1;表达式2;表达式3){
…代码块…
}
理解:
表达式1:初始化变量
表达式2:判断条件
表达式3:更新变量
执行流程:
1.初始化变量
2.判断条件:判断条件的结果必须是boolean
2.1 true - 执行代码块,并更新变量,重复第2个步骤
2.2 false- 跳出整个循环语句

for嵌套

示例:打印如下图案

  *
 ***
*****

代码:

int n=3;    //设置图案的高度为3
for(int i=0;i<n;i++){
	for(int j=0;j<n+i;j++){
		if(i+j<n-1)System.out.print(" ");
		else System.out.print("*");
	}
	System.out.println();
}

示例:打印九九乘法表

for(int i = 1;i<=9;i++){
	for(int j = 1;j<=i;j++){
		System.out.print(j + "x" + i + "=" + (i*j) + "\t");
	}
	System.out.println();
}
重点注意:

注:

  1. for( ; ; ) 表达式123都为空,会出现运行的死循环。(需要避免!)

  2. 伪死循环的概念:非无限死循环,程序最终能够完成循环,但需要执行的次数过于庞大。(需要避免!)

    例:

    for(int i = 0;i>=0;i++) {}
    

    ​ 因为int类型取值范围为21亿多(具体可参照java入门基础一 4.3.1),所 以 for循环次数也为21亿多次,直到i的值为负数,循环才能结束。

  3. 在for循环中定义并且初始化的变量,只能够在for循环中使用,如果想要在整个方法中使用,需要在for外定义。

7.3.2 while循环

语法结构:

​ while(表达式){
​ …while代码块…
​ }

理解(与if分支有相似之处):
表达式的结果必须是boolean
true - 执行代码块
false- 跳出循环

死循环:

while(true){
		System.out.println("死循环");
}

7.3.3 do-while循环

语法结构:
do{
…代码块…
}while(表达式);

理解:
表达式的结果必须是boolean
true - 执行代码块
false- 跳出循环

执行顺序:

​ 1.先执行一遍代码块
​ 2.判断表达式
​ 2.1 true - 执行代码块,再重复2
​ 2.2 false- 跳出循环

拓展:for、while 和do while

语法结构的区别:
for(初始化变量;判断条件;更新变量){}
while(判断条件){}
do{}while(判断条件);
循环共同点:判断条件的结果都是boolean值,true-循环 false-跳出循环
执行顺序的区别:
for:先判断,再执行
while:先判断,再执行
do-while:先执行一遍,再判断

应用场景的区别:
循环次数确定:for
循环次数不确定,先判断,再执行:while
循环次数不确定,先执行一遍,再判断:do-while

7.4 特殊的流程控制语句

7.4.1 break

  1. 作用:作用于循环中,表示跳出当前循环(即执行到break直接退出当前循环,不再操作任何循环内的语句)

  2. 示例:

    while(true){
    	System.out.println("1");
    	System.out.println("2");
    	if(true){
    		break;
    	}
    	System.out.println("3");
    	System.out.println("4");
    }
    /*
    输出结果:
    1
    2
    */
    

    注:break跳出当前循环,若是循环多重嵌套,break在内层循环时,一次只能调到外层循环中,而不能直接结束所有循环。(若是想要通过break结束任意对应循环,可参照7.4.4 lable)

7.4.2 continue

  1. 作用:作用于循环中,表示跳过当前循环剩余的部分,进入到下一次循环(即执行到continue时,立即越过当前一次的循环。)

  2. 示例

    for(int i=0;i<3;i++){
    	System.out.print("1");
    	System.out.print("2");
    	if(true){
    		continue;
    	}
    	System.out.print("3");
    	System.out.print("4");
    }
    /*
    输出结果:
    121212
    */
    

    解释:示例中的for循环,每次都跳过了3和4的输出语句。

7.4.3 return

  1. 作用:作用于当前方法,表示立即结束当前方法的执行。

  2. 示例:

    public static void main(String[] args){
        System.out.println("1");
        System.out.println("2");
        if(true){
            return;
        }
        System.out.println("3");
        System.out.println("4");
    }
    /*
    输出结果:
    1
    2
    */
    

    解释:return作用的当前方法为main方法,执行到return时,直接结束main方法的执行。

7.4.4 lable

  1. 作用:标记循环,给循环贴上标签,lable标签需要和break一起使用,表示结束标签对应的循环。

  2. 示例(对照比较):

    for(int i=0;i<4;i++){			
    	for(int j=0;j<4;j++)
    		System.out.print("("+i+","+j+")\t");
    	System.out.println();
    }
    /*
    输出结果:
    (0,0)	(0,1)	(0,2)	(0,3)	
    (1,0)	(1,1)	(1,2)	(1,3)	
    (2,0)	(2,1)	(2,2)	(2,3)	
    (3,0)	(3,1)	(3,2)	(3,3)
    */
    
    for(int i=0;i<4;i++){			
    	for(int j=0;j<4;j++){
    		if(i==2){
    			break;
    		}
    		System.out.print("("+i+","+j+")\t");
    	}
    	System.out.println();
    }
    /*
    输出结果:
    (0,0)	(0,1)	(0,2)	(0,3)	
    (1,0)	(1,1)	(1,2)	(1,3)	
    
    (3,0)	(3,1)	(3,2)	(3,3)	
    */
    

    解释:当外层循环i=2时,break结束了当前的内循环,但外循环依旧执行。

    lable_1:for(int i=0;i<4;i++){			
    			for(int j=0;j<4;j++){
    				if(i==2){
    					break lable_1;
    				}
    				System.out.print("("+i+","+j+")\t");
    			}
    		System.out.println();
    		}
    /*
    输出结果:
    (0,0)	(0,1)	(0,2)	(0,3)	
    (1,0)	(1,1)	(1,2)	(1,3)
    */
    

    解释:通过break和标签,直接结束了标签对应的for外循环,而不是当前的内循环。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值