Java流程控制
用户交互Scanner
- 之前我们学的基本语法并没有实现程序和人的交互,Java给我们提供了一个工具类,可以获取用户的输入java.util.Scanner是Java5的新特征,我们通过Scanner类来获取用户的输入。
- 基本语法
Scanner s = new Scanner(System.in);
- 通过Scanner类的 next()与 nextLine()方法获取用户的字符串,读取前一般用hasNext()与hasNextLine()判断是否还有输入的数据。
//创建一个扫描器对象
Scanner scanner = new Scanner(System.in);
System.out.println("使用next方式接收");
//判断用户有没有输入字符串
if(scanner.hasNext()){ //使用hasNextLie()会接收一行 "hello world"
//使用next方式接收
String str = scanner.next();
System.out.println("输入的内容为:"+str);
//input: hello word
//输入的内容为:hello
}
//凡是属于IO流的类如果不关闭会一直占用资源
scanner.close();
next()
- 一定要读取到有效字符才可以结束输入
- 对输入有效字符之前遇到的空白,next()方法会将其去掉
- 只有输入有效字符后才将其后面输入的空白作为结束符
- next()不能得到带有空格的字符串
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()){
int i=scanner.nextInt();
System.out.println("输入的整数为:"+i);
}else {
System.out.println("输入的不是整数数据");
}
顺序结构
- 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("缺考");
}
switch多选择结构
char grade = 'C'; //JDK8新特性 可以是字符串(字符本质还是数字)
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;
}
IDEA反编译之后.class文件与源代码对比
循环结构
- while循环
//计算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用于循环语句中,终止某次循环过程,跳过剩余语句,之间进行下一次循环条件判断。
- 标签:后面跟一个冒号的标识符 label:
//打印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+" ");
}
流程控制练习
//打印等腰空心三角形
/* 例如:输入为4时
*
* *
* *
* * * *
*/
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt(); //n为三角形高
for(int i=1;i<=n;i++){
for(int j=1;j<=2*n-1;j++){
if(i!=n){ //若不为最后一行
if(i+j==n+1)
System.out.print("*"); //三角形左腰边
else if(i+j==n+2*i-1)
System.out.print("*"); //三角形右腰边
else System.out.print(" ");
}
else if(j%2!=0){ //最后一行,底边
System.out.print("*");
}else {
System.out.print(" ");
}
}
System.out.println(); //换行
}