java流程控制
用户交互类——Scanner
工具类:java.util.Scanner:
s.next()方法
- 一定要读到有效字符后才结束输入
- 对输入有效字符之前遇到的空白,next()方法会自动将其去掉
- 只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符
- next()不能得到带有空格的字符串
s.nextLine()方法
- 遇见Enter后结束用户输入,nextLine()方法返回的是输入回车之前的所有字符
- 可以获得空格符
s.nextDouble()方法
- 一定要读到有效的字符后才结束输入
- 对输入有效字符之前遇到的空白,nextDouble()方法会自动去掉
- 只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符
- nextDouble()不能得到带有空格的字符串
- nextDouble()只能输入数字,否则会抛出异常
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);
}
//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);
}
//IO流使用完成后要及时关闭
scanner.close();
}
}
import java.until.Scanner;
public class Demo04 {
public static void main(String[] args) {
//我们可以输入多个数字,并求和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出执行结果
Scanner scanner = new Scanner(System.in);
System.out.println("*****计算输入数据的和*****");
//数据和
double sum = 0;
//计算输入了多少个数字
int m = 0;
//通过循环判断是否还有数字输入,并在里面对每一次进行求和统计
while (scanner.hasNextDouble()) {
m = m + 1; //m++
double x = scanner.nextDouble();
sum = sum + x;
System.out.println("你输入了第" + m + "个数据,当前结果为sum=" + sum);
}
System.out.println(m + "个数的和为" + sum);
System.out.println(m + "个数平均数的和" + sum / m);
scanner.close();
}
}
顺序结构
- java的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句执行
- 顺序结构是最简单的算法结构
选择结构
-
if单选结构
if(条件){ 执行代码 }
例子:
public class Select { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); //生成scanner对象 System.out.print("请输入内容"); String str = scanner.nextLine(); //equals:判断字符串是否相等 if (str.equals("Hello")) { System.out.println(str); } System.out.println("out"); scanner.close(); } }
-
if双选结构
if(条件){ 执行代码1; }else{ 执行代码2; }
-
if多选结构
if(条件1){ 执行代码1; }else if(条件2){ 执行代码2; }else if(条件3){ 执行代码3; }else{ 执行代码4; }
-
switch多选择结构
/* 1.变量的数据类型:8大基本类型及String类型(java SE 7开始支持String类型) 2.比较变量跟值是否相等,相等则执行与值相对应代码块(每一个值称为一个分支) 3.当代码块中没有break时发生穿透现象 4.当没有对应值时,执行defalult下的代码 */ switch(变量){ case 值1: 执行代码1; break; case 值2: 执行代码2; break; case 值3: 执行代码3; break; default: 执行代码4; }
例:
public class SwichDemo01 { public static void main(String[] args) { //switch 匹配一个具体的值 //case穿透 char grade = 'r'; switch (grade) { case 'a': System.out.println("优秀"); break; case 'b': System.out.println("良好"); break; case 'c': System.out.println("及格"); break; case 'd': System.out.println("不及格"); break; default: System.out.println("未知等级"); } } }
循环结构
-
while循环
while(布尔表达式){ //循环内容 }
-
do…while循环
do{ //循环体,即使不满足条件也会执行一次 }while(布尔表达式)
-
for循环
IDEA快捷键 100.for
for(初始化;布尔表达式;更新迭代){ //代码语句 }
例1:
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循环结束"); } }
例2:
public class ForDemo02 { public static void main(String[] args) { //打印1-100内奇数的和偶数的和 int oddSum = 0; //基数的和 int evenSum = 0;//偶数的和 for (int i = 0; i <= 100; i++) { if (i % 2 != 0) { oddSum += i; } else { evenSum += i; } } System.out.println(oddSum); System.out.println(evenSum); } }
例3:
public class ForDemo03 { public static void main(String[] args) { //1-1000之间能被5整除则输出,每行输出三个 int num = 0; //方案1: int time = 0; for (int i = 1; i <= 1000; i++) { if (i % 5 == 0) { num = i; time++; System.out.print(num+"\t"); if (time == 3) { System.out.println(); time = 0; } } } //方案2: for (int i = 1; i <= 1000; i++) { if (i % 5 == 0) { System.out.print(i+"\t"); } if (i % (5 * 3) == 0) { System.out.println(); } } } }
例4:
public class ForDemo04 { public static void main(String[] args) { //打印九九乘法表 for (int i = 1; i <= 9; i++) { //外层循环,打印九行 for (int num =1 ; num <= i; num++) {//内层循环,每层按要求打印列数 System.out.print(num+"*"+i+"="+i*num+"\t"); } System.out.println(); } //解题方法 //1.打印第一列 /* for(int i=1;i<=9;i++){ System.out.println("1"+"*"+i); } */ //2.每列中在循环打印每行的内容 /* for(int i=1;i<=9;i++){ for(int j=1;j<=9;j++){ System.out.print(j+"*"+i); } System.out.println();//换行 } */ //3.去掉重复项 /* for(int i=1;i<=9;i++){ for(int j=1;j<=i;j++){ System.out.print(j+"*"+i); } System.out.println();//换行 } */ }
增强for循环
for(int x : 表达式){ //代码语句 }
例:
public class ForDemo5 { public static void main(String[] args) { int[] number = {10, 20, 30, 40, 50};//定义一个数组 for (int i=0;i<number.length;i++) { System.out.println(number[i]); } System.out.println("******************"); //遍历数组的元素 for (int x : number) { //简化数组的遍历。重点是简化数组和集合的遍历 System.out.println(x); } } }
break & continue
-
break
-
break在任何循环语句主体部分,均可用break控制循环流程。break用于强制退出循环,
不执行循环剩余的语句。(break语句也在switch语句中使用)
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("1"); } } }
-
-
continue
-
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"); } } }
-
-
goto关键字
continue 、break标签的用法
“标签”是指后面跟一个冒号的标识符,例如: outer:
对java来说唯一用到标签的地方是在循环语句之前,而在循环之前设置标签的唯一理由:我们希望在其中嵌套另一个循环,由于break和continue关键字通常只中断当前循环,但若随着同标签使用,他们就会中断到存在标签的地方
public class LabelDemo { public static void main(String[] args) { //打印101——150之间的质数 int count = 0; outer:for (int i = 101; i <= 150; i++) { // //System.out.println("i="+i); for (int j = 2; j < i / 2; j++) { if (i % j == 0) { continue outer; //加上标签outer指定continue作用位置,终止最外层循环语句本次循环过程 } } System.out.println(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("*");
}
for (int j = 5; j >= i; j--) {
System.out.print(" ");
}
System.out.println();
}
}
}