Java流程控制
1. 用户交换Scanner
**1. java.util.Scanner是java5的新特征,可以通过Scanner类获取用户的输入 **
- 基本语法:
Scanner s = new Scanner(System.in)
-
通过Scanner类的next()与nextLine()方法获取字符串
-
通过hasNext()与hasNextLine()判断是否还有输入数据
(从这里可以看出来Java方法的命名原则,首字母小写,驼峰原则)
2.next():
-
一定读取到有效字符后才可以结束输入
-
对输入有效字符之前遇到的空白,next()方法都会自动去掉
-
只有输入有效字符后它才会将后面输入的空格作为分隔符或者结束符
-
next()不能得到带有空格的字符串
nextLine():
-
以 Enter回车键为结束符,它返回的是输入回车之前的所有字符
-
可以获得空格
3.Scanner的进阶使用
scanner.hasNextInt()
scanner.hasNextDouble()
2. 顺序结构
语句与语句之间,程序块与程序块之间都是从上至下的顺序进行的,是最基本的算法结构
3. 选择结构
-
if但选择结构
if(s.equals("hello")){ //执行的语句 }
-
if双选择结构
if(){
}else{
}
-
if的多选择结构
if(flag){ }else if(){ }else if(){ } //有一个满足条件就执行,执行后跳过其余的if,else
-
if的嵌套
-
switch多选择结构
switch(score){ case value: //case后面必须是字符常量或者常亮!!! //语句 break; //跳出switch,如果没有的话会出现case穿透现象,执行后面所有case后的语句,所以一定得加上它!!!!!! case value: //语句 }
从Java SE 7 开始,switch支持字符串 String类型了
(字符的本质为数字)
扩展知识:反汇编,通过idea打开calsss文件,用别的会乱码,可以看到switch本质比较的还是数字,hashcode
4. 循环结构
-
while循环
public class WhileDemo1 { public static void main(String[] args) { int i = 0; while(i<100){ //通常会给一个存在不满足的情况的条件 System.out.println(i); i++; } } while(true){ //死循环 //等待客户连接 //定时检查 }
-
do··· while循环
do{ //与while的区别是它至少会运行一次,而while不满足条件就不会进入循环 }while(布尔表达式); //while(){}先判断再执行;do···while是先执行再检测条件
-
for循环
for循环语句是支持迭代的一种通用结构,是最有效最灵活的循环结构
for(初始化;布尔表达式;更新){ //代码语句 } System.out.println("输出的都是100以内的奇数"); for(int i = 1;i < 100;i+= 2){ System.out.println(i); } //快捷输入,入输入 100.for再回车,很高效!!!! for (int i = 0; i < 100; i++) { } /*关于for 就你有以下几点说明: 最先执行初始化步骤。可以声明一种类型,但可初始化一个或多个循环控制变量,他可以是空语句。 然后,检测布尔表达式的值。为true.执行循环体。如果为false,循环停止,牙始执行循环体后面的语句。 执行一次循环体后,更新循环的控制变量(迭代因子控制循环变量的增减) 再次检测布尔表达式。循环执行上面的过程 */ for(;;){ //这是个死循环 } for (int i = 0; i < 100; i++) { if(i%2!=0){ System.out.println("这是一个奇数:"+i); } }
package com.kang.Scanner; public class ForDemo01 { public static void main(String[] args) { for (int i = 1; i <= 1000; i++) { if(i%5==0){ // System.out.println("这是一个被5整除的数"+i); System.out.print(i+"\t"); //\t是补全当前字符串长度到8的整数倍,最少1个最多8个空格 } if(i%(5*3)==0){ //达到每行输出三个 System.out.println(); //System.out.print("\n"); //printtLn 输出不会换行 //print 输出会换行 } } } }
public class ForDemo01 { public static void main(String[] args) { System.out.println("九九乘法表"); for (int i = 1; i <= 9; i++) { for (int i1 = 1; i1 <= i; i1++) { System.out.print(i+"*"+i1+"="+i*i1+"\t"); //\t是补全当前字符串长度到8的整数倍,最少1个最多8个空格;补多少要看你\t前字符串长度;比如当前字符串长度10,那么\t后长度是16,也就是补6个空格;如果当前字符串长度12,此时\t后长度是16,补4个空格 } System.out.println(); } } }
-
在java5中引入了一种主要用于数组的增强型for循环
public class ForDemo02 { public static void main(String[] args) { int [] numbers = {10,20,30,40,50,60}; //遍历数组的元素 for(int x : numbers){ System.out.println(x); } } }
5. break & continue
◆break在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句。(break语句也在switch语句中使用)
◆continue 语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。
◆关于goto关键字
◆goto关键字很早就在程序设计语言中出现.尽管goto仍是Java的一个保留字,但并未在语言中得到正式使用;Java没有goto。然而,在break和continue这两个关键字的身上,我们仍然能看出一些goto的影子—带标签的break和continue。
◆“标签”是指后面跟一个冒号的标识符,例如:label:
◆对Java来说唯一用到标签的地方是在循环语句之前。而在循环之前设置标签的唯一理由是:我们希望在其中嵌套另一个循环,由于break和continue关键字通常只中断当前循环,但若随同标签使用,它们就会中断到存在标签的地方。
//输出101-150之间的质数
//这种带标签的不建议使用
outer:for (int i = 101; i < 150; i++) {
for(int j =2; j <i/2;j++){
continue outer;
}
System.out.println(i+"");
}
6. 练习
public class TestDemo01 {
//打印三角形 5行
public static void main(String[] args) {
for (int i = 0; i <= 5; i++) {
for (int j = 5; j >= i; j--) {
System.out.print(" ");
}
for (int j = 1; j <= i; j++) {
System.out.print("*");
}
for (int j = 0; j <= i; j++) {
System.out.print("*");
}
System.out.println();
}
}
}