流程控制
一、用户交互Scanner
-
java.util.Scanner是Java5的新特征,可以通过Scanner类来获取用户的输入
-
//基本语法 Scanner s = new Scanner(System.in);
-
获取输入的字符串:next()和nextLine()方法
-
判断是否还有输入的数据:hasNext()和hasNextLine()方法
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()) {
String str = scanner.next();//程序会等待用户输入完毕
System.out.println("输出的内容为:"+str);
}
//凡是属于IO流的类如果不关闭会一直占用资源,要养成好习惯用完就关闭
scanner.close();
}
}
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()) {
String str = scanner.nextLine();
System.out.println("输出的内容为:"+str);
}
scanner.close();
}
}
- next():不能得到带有空格的字符串
- nextLine():以Enter为结束符,即返回输入回车之前的所有字符,可以获得空格
import java.util.Scanner;
public class Demo03 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//从键盘获取数据
int i = 0;
float f = 0.0f;
System.out.println("请输入整数:");
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("小1数数据:"+f);
}else {
System.out.println("输入的不是小数数据!");
}
scanner.close();
}
}
import java.util.Scanner;
public class Demo04 {
public static void main(String[] args) {
/*我们可以输入多个数字,并求其总和与平均数
没输入一个数字用回车确认
通过输入非数字来结束输入并输出执行结果
* */
Scanner scanner = new Scanner(System.in);
//和
double sum = 0;
//计算书入了多少个数字
int m = 0;
//通过循环判断是否还有输入,并在里面对每一次进行求和和统计
while(scanner.hasNextDouble()) {
double x = scanner.nextDouble();
m ++;
sum += x;
}
System.out.println(m+"个数的和为"+sum);
System.out.println(m+"个数的平均数为"+(sum/m));
scanner.close();
}
}
二、顺序结构
- java的基本结构就是顺序结构
- 语句与语句之间,框与框之间是按照从上到下的顺序进行的,由若干个依次执行的处理步骤组成,是任何一个算法都离不开的一种基本算法结构。
三、选择结构
-
if单选择结构
import java.util.Scanner; public class Demo02 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入内容:"); String s = scanner.nextLine(); //equals:判断字符是否相等 if(s.equals("Hello")) { System.out.println(s); }else { System.out.println("End"); } scanner.close(); } }
-
if双选择结构
import java.util.Scanner; public class Demo03 { public static void main(String[] args) { //考试分数大于60是及格,小于60不及格 Scanner scanner = new Scanner(System.in); System.out.println("请输入成绩:"); int score = scanner.nextInt(); if (score >= 60) { System.out.println("及格"); }else { System.out.println("不及格"); } scanner.close(); } }
-
if多选择结构
import java.util.Scanner; public class Demo04 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入成绩:"); int score = scanner.nextInt(); if (score >= 100) { System.out.println("恭喜满分!"); }else if (score < 100 && score >= 90) { System.out.println("A级"); }else if (score < 100 && score >= 80) { System.out.println("B级"); }else if (score < 100 && score >= 70) { System.out.println("C级"); }else if (score < 100 && score >= 60) { System.out.println("D级"); }else if (score > 0 && score < 60) { System.out.println("不及格"); } else { System.out.println("成绩不合法"); } scanner.close(); } }
-
if嵌套结构
-
switch多选择结构
public class SwitchDemo01 { public static void main(String[] args) { char grade = 'C'; switch (grade) { case 'A': //case穿透现象:如果没有break语句,在匹配上之后就会挨着case输出 System.out.println("优秀"); break; case 'B': System.out.println("良好"); //break; case 'C': System.out.println("及格"); //break; default: System.out.println("未知等级"); } } }
- switch语句中的变量类型可以是:byte short int 或char
- javaSE7开始支持String类型
四、循环结构
-
while循环
不满足条件则无法进入循环
public class WhileDemo01 { public static void main(String[] args) { //输出1-100 int i = 0; while(i<100) { i ++; System.out.println(i); } } }
-
do...while循环
即使不满足条件,也至少执行一次
public class DowhileDemo { public static void main(String[] args) { int i = 0; int sum = 0; do { sum += i; i ++; }while (i<=100); System.out.println(sum); } }
public class DowhileDemo02 { public static void main(String[] args) { int a = 0; while (a<0) { System.out.println(a); } System.out.println("==================="); do { System.out.println(a); }while (a<0); } }
-
for循环
for(初始化值;布尔表达式;更新)
public class ForDemo01 { public static void main(String[] args) { int a = 1;//初始化条件 while (a <= 100) {//条件判断 System.out.println(a);//循环体 a += 2;//迭代 } System.out.println("while循环结束!"); //初始化值、条件判断、迭代 for(int i=1;i<=100;i++) { System.out.println(i); } System.out.println("for循环结束!"); } }
- 最先执行初始化步骤,可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。
public class ForDemo02 { public static void main(String[] args) { //用while或for循环输出1-100之间能被5整除的数 //并且每行输出三个 for (int i = 0; i < 1000; i++) { if (i % 5 == 0) { System.out.print(i+"\t"); } if (i % (5*3)==0) {//换行 System.out.println(); } } } }
public class ForDemo03 { public static void main(String[] args) { //打印九九乘法表 for (int i = 1; i <= 9; i++) { for (int j=1;j <= i;j++) { System.out.print(i+"*"+j+"="+i*j+"\t"); } System.out.println(); } } }
-
增强for循环
public class ForDemo05 { public static void main(String[] args) { int[] numbers = {10,20,30,40,50};//定义一个数组 //遍历数组元素 for (int x:numbers) { System.out.println(x); } System.out.println("================"); for(int i=0;i<5;i++) { System.out.println(numbers[i]); } } }
五、break & continue
-
break
在任何循环语句的主体部分,均可用break控制循环的流程。
break用于强行退出循环,不执行循环中剩余的语句,但没有终止程序。
public class BreakDemo { public static void main(String[] args) { int i = 0; while(i < 100) { i ++; System.out.println(i); if (i==30) { break; } } System.out.println("程序到这才停止。"); } }
-
continue
在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着执行下一次是否执行循环的判定。
public class ContinueDemo { public static void main(String[] args) { int i = 0; while (i < 100) { i ++; if (i % 10 == 0) { System.out.println(); continue; } System.out.print(i+"\t"); } } }
六、练习
public class TestDemo01 {
public static void main(String[] args) {
//打印三角形 5行
for(int i=1;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=1;j<i;j++) {
System.out.print("*");
}
System.out.println();
}
}
}