java流程控制
用户交互Scanner
Scanner基本使用
java.util.Scanner,可以通过Scanner类来获得用户的输入
-
基本语法:
Scanner scanner = new Scanner(System.in);
-
通过Scanner类的next()与nextLine()可以获得用户输入的字符串,读取前需要通过hasNext()与hasNextLine()判断是否还有输入的数据
-
next():
读取到有效字符之后才能结束输入,有效字符之后的空白会将其作为结束符号,有效字符之前的空白不会显示,即next()不会显示空白。
package com.yushuo.scanner; import java.util.Scanner; public class Demo01 { public static void main(String[] args) { //创建一个扫描器对象用以接收键盘输入数据 Scanner scanner = new Scanner(System.in); //使用next方式接收 System.out.println("使用next方式接收:"); //判断用户有没有输入字符串 if (scanner.hasNext()){//判断条件为scanner.hasNext() == true //使用next方式接收 String str = scanner.next(); System.out.println("输出的内容为:" + str); } //凡是属于IO流的类,如果不关会一直占用资源,因此养成良好习惯,用完就关 scanner.close(); } }
-
nextLine():
以回车键为结束符,会显示之前的所有内容,包括空白。
使用较为方便,因此比next()常用。
package com.yushuo.scanner; import java.util.Scanner; public class Demo02 { public static void main(String[] args) { //创建一个扫描器对象用以接收键盘输入数据 Scanner scanner = new Scanner(System.in); //使用next方式接收 System.out.println("使用nextLine方式接收:"); //判断用户有没有输入字符串 if (scanner.hasNextLine()){//判断条件为scanner.hasNextLine() == true //使用nextLine方式接收 String str = scanner.nextLine(); System.out.println("输出的内容为:" + str); } //凡是属于IO流的类,如果不关会一直占用资源,因此养成良好习惯,用完就关 scanner.close(); } }
package com.yushuo.scanner; import java.util.Scanner; public class Demo03 { //可以不加判断,使用nextLine() public static void main(String[] args) { //创建一个扫描器对象用以接收键盘输入数据 Scanner scanner = new Scanner(System.in); //使用next方式接收 System.out.println("请输入数据使用:"); //使用nextLine方式接收 String str = scanner.nextLine(); System.out.println("输出的内容为:" + str); //凡是属于IO流的类,如果不关会一直占用资源,因此养成良好习惯,用完就关 scanner.close(); } }
-
Scanner进阶使用
-
输入整数hasNextInt()与nextInt()
//接受整数数据 System.out.println("请输入整数:"); if (scanner.hasNextInt()){ i = scanner.nextInt(); System.out.println("整数数据为:" + i); }else { System.out.println("输入的不是整数!"); }
-
输入小数数据hasNextFloat()与nextFloat(),也可以是double
//接受小数数据 System.out.println("请输入小数:"); if (scanner.hasNextFloat()){ f = scanner.nextFloat(); System.out.println("小数数据为:" + f); }else { System.out.println("输入的不是小数!"); }
-
事例练习:输入一些数字,求和与平均值
package com.yushuo.scanner; import java.util.Scanner; public class Demo05 { public static void main(String[] args) { /** * 练习: * 输入多个数字,求其总和与平均数 * 每输入一个数字用回车确认,以非数字结束输入并输出结果 */ Scanner scanner = new Scanner(System.in); int n = 0;//记录输入的数字个数 float s = 0.0f,f;//s是所有数字综合,f是每个输入的数字 System.out.println("请输入数字:"); while (scanner.hasNextFloat()){ f = scanner.nextFloat(); s = s + f; n++; } System.out.println("输入数字的总和为:" + s); System.out.println("输入数字的平均数为:" + s/n); scanner.close(); } }
结构
顺序结构
普通的结构,一步一步从上往下执行。
选择结构
if选择结构
-
if单选择结构
if(boolean表达式){
如果为true,执行内容,否则不执行
}
package com.yushuo.structure; import java.util.Scanner; public class ifDemo01 { 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); } System.out.println("End"); scanner.close(); } }
-
if双选择结构
if(boolean表达式){
如果为true,执行此内容
}else{
如果为false,执行此内容
}
package com.yushuo.structure; import java.util.Scanner; public class IfDemo02 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); //输入成绩,判断是否及格 int score;//成绩 System.out.println("请输入成绩:"); score = scanner.nextInt(); if (score >= 60){ System.out.println("及格"); }else{ System.out.println("不及格"); } scanner.close(); } }
-
if多选择结构
if(boolean表达式1){
如果为true,执行内容
}else if(boolean表达式2){//可以加很多个else if
如果为true,执行内容
}else{
如果前面都为false,执行内容
}
package com.yushuo.structure; import java.util.Scanner; public class IfDemo03 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); //输入成绩,判断及格与优秀 int score;//成绩 System.out.println("请输入成绩:"); score = scanner.nextInt(); if (score >= 85){ System.out.println("优秀"); }else if (score >= 60 && score < 85){ System.out.println("及格"); }else { System.out.println("不及格"); } scanner.close(); } }
-
if的嵌套结构
可以在一个if里面添加if
if(boolean表达式1){
如果为true,执行内容,否则不执行
if(boolean表达式2){
}
}
switch选择结构
判断一个变量与一系列值中的某个是否相等,执行相等值的那个分支
switch(expression){
//expression与value比较
//可以是byte,int,short,char,String(jdk7以后)
//value必须是字符串常量或字面量
case value1:
//语句
break;//可选
case value2:
//语句
break;//可选
default://可选
//语句
}
使用举例
package com.yushuo.structure;
import java.util.Scanner;
public class SwitchDemo01 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int i;
System.out.println("请输入1到4的整数:");
i = scanner.nextInt();
/**
* 输入的数进行比较,必须使用break,否则后面的将继续进行
* 例如:
* 输入1,满足case 1,随后由于没有break,会把下面的全部执行
*/
switch (i){
case 1 :
System.out.println("优秀");
break;
case 2 :
System.out.println("良好");
break;
case 3 :
System.out.println("及格");
break;
case 4 :
System.out.println("不及格");
break;
default:
System.out.println("非法输入!");
}
scanner.close();
}
}
- 反编译——IEDA打开.calss文件所在目录,将文件复制到包中,双击打开即可看到反编译后的文件
循环结构
while循环结构
语法
while(boolean){
//循环执行内容直至为假
}
//举例
package com.yushuo.structure;
public class WhileDemo01 {
public static void main(String[] args) {
//输出1到10
int i = 0;
while (i<10){
i++;
System.out.println(i);
}
}
}
- while要避免无限循环
dowhile循环结构
- 与while不同,dowhile先执行一次循环内容,再判断循环条件
package com.yushuo.structure;
public class DoWhileDemo01 {
public static void main(String[] args) {
//1到100求和
int i = 0,sum = 0;
do {
i++;
sum = sum + i;
}while (i<100);
System.out.println(sum);
}
}
for循环
- for循环是最有效、最灵活的循环结构
//语法
for(初始条件;判断条件;更新){
}
package com.yushuo.structure;
public class ForDemo01 {
public static void main(String[] args) {
//1到100求和
int sum = 0;
/**
* 可以通过输入100.for回车得到
* 执行顺序:
* 先进行初始化,初始化可以为空
* 随后进行判断条件
* 执行一次循环以后进行一次更新,然后再进行判断
* 重复上一行
*/
for (int i = 0;i <= 100;i++){
sum = sum + i;
}
System.out.println(sum);
}
}
增强for循环
- 主要用于数组和集合
package com.yushuo.structure;
public class ForDemo05 {
public static void main(String[] args) {
int[] numbers = {10,20,30,40,50};
/**
* 遍历数组numbers里面的每个元素,赋值给x
*/
for (int x:numbers){
System.out.println(x);
}
}
}
break与continue
-
break用以强制退出循环
package com.yushuo.structure; public class BreakDemo { public static void main(String[] args) { int sum = 0; /** * 0到30,求和 */ for (int i = 0; i < 100; i++) { if (i > 30){ break; } sum += i; } System.out.println(sum); } }
-
continue用以强制退出某次循环
package com.yushuo.structure; public class ContinueDemo { public static void main(String[] args) { int sum = 0; /** * 0到29,31到100求和 */ for (int i = 0; i < 100; i++) { if (i == 30){ continue; } sum += i; } System.out.println(sum); } }
练习:打印三角形
package com.yushuo.structure;
public class TestDemo {
public static void main(String[] args) {
int j;
//打印三角形,5行,每行*的个数为1、3、5、7、9
for (int i = 0; i < 5; i++) {
for (j = 0; j < 9; j++){
if (j < (4-i) || j > (4+i)){
System.out.print(" ");
}else {
System.out.print("*");
}
}
System.out.println();
}
}
}