注:next() 与 nextLine() 区别
next():
- 一定要读取到有效字符后才可以结束输入。
- 对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。
- 只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
- 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
- if的表达式结果必须为boolean类型,而switch的表达式有多种(byte,short,int,枚举,String)
- if能够判断单个值,区间以及复杂的条件,而switch只能判断单个值,但结构清晰,比较方便,更加易读。
[](
)重点注意
- case的值绝对不能相等。
- 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;
}
- 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的代码块
- 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();
}
[](
)重点注意:
注:
- for( ; ; ) 表达式123都为空,会出现运行的死循环。(需要避免!)
- 伪死循环的概念:非无限死循环,程序最终能够完成循环,但需要执行的次数过于庞大。(需要避免!)
例:
for(int i = 0;i>=0;i++) {}
因为int类型取值范围为21亿多(具体可参照java入门基础一 4.3.1),所 以 for循环次数也为21亿多次,直到i的值为负数,循环才能结束。
- 在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(判断条件);