Java流程控制
目录
- 用户交互Scanner
- 顺序结构
- 选择结构
- 循环结构
- break&continue
- 练习
用户交互Scanner
Java提供了一个工具类,用来获取用户的输入。java.util.Scanner是java5的特性,我们可以通过Scanner类来获取用户的输入
基本语法:
Scanner s = new Scanner(System.in);
通过Scanner类的**next()与nextLine()方法获取输入的字符串,在读取前我们一般需要使用hasNext()与hasNextLine()**判断是否还有输入的数据
package com.wang.www.Scanner;
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args) {
//创建一个扫描器对象,用于接受键盘数据
Scanner scanner = new Scanner(System.in);
System.out.println("使用next方法来接受数据:");
//判断用户有没有输入字符串
if (scanner.hasNext()){
//使用next方式接收
String str = scanner.next();
System.out.println("输入的内容为"+str);
}
scanner.close();
}
}
package com.wang.www.Scanner;
import java.util.Scanner;
public class Demo02 {
public static void main(String[] args) {
//创建一个扫描器对象,用于接受键盘数据
Scanner scanner = new Scanner(System.in);
System.out.println("使用nextLine方法来接受数据:");
//判断用户有没有输入字符串
if (scanner.hasNextLine()){
//使用nextLine方式接收
String str = scanner.nextLine();
System.out.println("输入的内容为"+str);
}
scanner.close();
}
}
package com.wang.www.Scanner;
import java.util.Scanner;
public class Demo03 {
public static void main(String[] args) {
//创建一个扫描器对象,用于接受键盘数据
Scanner scanner = new Scanner(System.in);
System.out.println("使用nextLine方法来接受数据:");
//判断用户有没有输入字符串,当然也可以不判断
//使用nextLine方式接收
String str = scanner.nextLine();
System.out.println("输入的内容为"+str);
scanner.close();
}
}
scanner的进阶使用
scanner 不仅仅是对字符串的获取,Java提供的scanner工具类其中的种类非常多,几乎涵盖了所有基本类型。
如:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kenQOIUV-1645945494408)(F:\java\code\img\scanner01.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fn8iS2la-1645945494409)(F:\java\code\img\scanner02.png)]
实例:
package com.wang.www.Scanner;
import java.util.Scanner;
public class Demo04 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//从键盘接受数据
int i = 0;
float f = 0.0f;
System.out.println("请输入整数:");
//判断 if
if(scanner.hasNextInt()){
i = scanner.nextInt();
System.out.println("输入了整数:"+i);
}else {
System.out.println("输入的不是整数!");
}
System.out.println("请输入小数:");
if (scanner.hasNextFloat()){
f = scanner.nextFloat();
System.out.println("输入了小数:"+f);
}else{
System.out.println("输入了非小数!");
}
scanner.close();
}
}
package com.wang.www.Scanner;
import java.util.Scanner;
public class Demo05 {
public static void main(String[] args) {
//我们可以输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,
// 通过输入非数字来结束输入并输出执行结果:
Scanner scanner = new Scanner(System.in);
//和
double sum = 0.0;
//计算输入了多少个数字
int m = 0;
System.out.println("请输入一个数据:");
//通过循环判断是否还有输入,并在里面对每一次进行求和和统计
while (scanner.hasNextDouble()){
double x = scanner.nextDouble();
m++;
sum = sum + x ;
System.out.println("你输入了第"+m+"个数据,然后当前结果是sum = "+sum);
}
System.out.println(m+"个数的和是"+sum);
System.out.println(m+"个数的平均值是"+(sum/m));
scanner.close();
}
}
顺序结构
顺序结构是最简单的算法结构
语句与语句之间由上到下执行
它是任何一个算法都离不开的一种基本算法结构
if选择结构
switch选择结构
package com.wang.www.struct;
public class switch01 {
public static void main(String[] args) {
String name = "李四";
//JDK7新特性,表达式结果可以是字符串!!!
//字符的本质还是数字
//反编译 java---class(字节码文件)-----反编译(IDEA)
switch (name){
case "张三" :
System.out.println("张三");
break;
case "李四" :
System.out.println("李四");
break;
default:
System.out.println("啥也不是!!!");
}
}
}
关于表达式的结果可以是字符串,其本质是字符的本质也是数字。可以使用反编译,将生成的编译文件,拖入idea中,打开,可以看到其中的文本信息如下部分:
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package com.wang.www.struct;
public class switch01 {
public switch01() {
}
public static void main(String[] args) {
String name = "李四";
byte var3 = -1;
switch(name.hashCode()) { //此处的hashCode()函数,将"李四"转换为hash数值在进行比较
case 774889:
if (name.equals("张三")) {
var3 = 0;
}
break;
case 842061:
if (name.equals("李四")) {
var3 = 1;
}
}
switch(var3) {
case 0:
System.out.println("张三");
break;
case 1:
System.out.println("李四");
break;
default:
System.out.println("啥也不是!!!");
}
}
}
其中的hashCode()函数,将"李四"转换为hash数值在进行比较,就可以比较了。
循环结构
-
while
-
do while
-
for : 最有效,最灵活的循环
-
增强for循环,循环数组
package com.wang.www.struct; public class strongFor01 { public static void main(String[] args) { int[] number = {1,2,3,4,5,6}; //增强for循环,遍历数组元素 for (int x :number){ System.out.println(x); } System.out.println("======================="); //等价于以下for循环 for (int i = 0; i < 6; i++) { System.out.println(number[i]); } } }
关于break、continue和goto
-
break:在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句。(break语句也在switch语句中使用)
-
continue:continue语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。
-
goto:关于goto关键字,goto关键字很早就在程序设计语言中出现。尽管goto仍是Java的一个保留字,但并未在语言中得到正式使用; Java没有goto。
然而,在break和continue这两个关键字的身上,我们仍然能看出一些goto的影子—带标签的break和continue。“标签”是指后面跟一个冒号的标识符,例如: label:
对Java来说唯一用到标签的地方是在循环语句之前。而在循环之前设置标签的唯一理由是:我们希望在其中嵌套另一个循环,由于break和continue关键字通常只中断当前循环,但若随同标签使用,它们就会中断到存在标签的地方。
package com.wang.www.struct; public class lableDemo01 { public static void main(String[] args) { //打印101-150之间的所有质数 //除了1和本身,没有其他因数的数,为质数 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+" "); } } }