4. JavaSE 流程控制
流程控制
用户交互Scanner
Scanner对象
-
之前我们学习的基本语法并没有实现程序和人的交互,java给我们提供了一个工具类,可以获取用户的输入java.util.scanner是java5的新特征,我们通过Scanner来获取用户输入。
-
基本语法
Scanner s = new Scanner(system.in);
-
通过Scanner类的 next()与 nextLine()方法获取用户的字符串,读取之前一般用hasNext()与hasNextLine()判断是否还有输入的数据。
next()
使用next方式接收一下输入的数据
//创建一个扫描器对象,用于接收键盘数据
Scanner scanner = new Scanner(System.in);
//next方式接收字符串
System.out.println("Next方式接收:");
//判断用户不有没有输入字符
if(scanner.hasNext()){
string str = scanner.next();
System.out.println("输入内容:" + str);
//input: hello word
//输入的内容为:hello
}
//凡是属于IO流的类如果不关闭会一直占用资源
scanner.close();
nextLine()
- 以Enter作为结束符,即返回输入回车之前所有的字符。
- nextLine()可以获取空白
//从键盘接收数据
Scanner scanner = new Scanner(System.in);
System.out.println("请输入数据:");
String str = scanner.nextLine();
System.out.println("输入的内容为:"+str);
scanner.close();
System.out.println("请输入整数:");
if(scanner.hasNextInt()){ //hasNextInt判断输入整数,还有hasNextDouble.....
int i=scanner.nextInt();
System.out.println("输入的整数为:"+i);
}else {
System.out.println("输入的不是整数数据");
}
next()与nextLine()区别
next():
- 1、一定要读取到有效字符后才可以结束输入。
- 2、对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。
- 3、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
- 4、next()不能得到带有空格的字符串。
nextLine():
- 1、以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。
- 2、可以获取空白
顺序结构
- Java的基本结构就是顺序结构,除非特别指明,否则就按语句一条一条执行。
- 顺序结构是最简单的算法结构。
- 语句语句之间是按从上到下执行的,它是由若干个依次执行的处理步骤组成的,它是如何一种算法都离不开的一种基本算法结构。
选择结构
- if单选择结构 if()
- if双选择结构 if(){}else{}
- if多选择结构 if(){}else if(){}else{}
- 嵌套的if结构 if(){if()
int a = 80;
if(a>60){
System.out.println("及格");
if(a>80) System.out.println("且优秀");
}else if(a>0){
System.out.println("不及格");
}else {
System.out.println("缺考");
}
swith多选择结构
char grade = 'C'; //JDK新特性 可以是字符串(字符本质还是数字)
switch (grade){
case 'A':
System.out.println("优秀");
break; //可选,跳出当前结构
case 'B':
System.out.println("良好");
break;
case 'C':
System.out.println("合格");
break;
default: //默认,以上值没匹配到
System.out.println("不及格");
break;
}
循环结构
wihle循环
- while是最基本的循环,它的结构为:
while(布尔表达式) {
//循环内容
}
只要布尔表达式为true,循环就会一直执行下去。
//计算1+2+3+...+100
int i=0;
int sum=0;
while(i<100){
i++;
sum+=i;
}
System.out.println(sum); //5050
do...while循环
//先执行后判断,至少执行一次
do{
i++;
sum+=i;
}while(i<100) //跟上面效果一样
for循环
//(初始化;条件判断;迭代)
for(int i=0;i<100;i++){
i++;
sum+=i;
}
for(; ; ){...} //死循环
//练习:输出1-1000能被5整除的数,每行输出3个
for (int i = 1; i <= 1000; i++) {
if(i%5==0){
System.out.print(i+"\t"); //输出完不换行
}
if(i%(3*5)==0){
System.out.println();
}
}
//练习2:输出九九乘法表
for(int i=1;i<=9;i++){
for(int j=1;j<=i;j++){
System.out.print(j+"*"+i+"="+i*j+"\t");
}
System.out.println();
}
增强for循环
int [] numbers = {10,20,30,40,50}; //定义一个数组
for (int x:numbers){
System.out.println(x); //遍历数组的元素 10 20 30 40 50
}
//相当于
for(int i=0;i<5;i++){
System.out.println(numbers[i]);
}
break&continue
- break可以在任何循环的主体部分,用于强行退出循环,也可以用在switch语句。
- continue用于循环语句中,终止某次循环过程,跳过剩余语句,之后进行下一次循环条件判断。
- 标签:后面跟一个冒号的标识符lable:
//打印101-150之间所有的质数
int count = 0;
outer:for(int i=101;i<=150;i++){
for (int j=2;j<i/2;j++){
if(i%j==0)
continue outer; //不建议使用标签
}
System.out.print(i+" ");
}