Java04_流程控制
流程控制
用户交互Scanner
Scanner对象
获取用户的输入
import java.util.Scanner;
//基本语法
Scanner s=new Scanner(System.in);
通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取之前我们一般取药使用hasNext()、hasNextLine()判断是否还有输入的数据。
next()
- 一定要接收到有效字符后才可以结束输入。
- 对有效字符输入之前的空白 ,next()方法会自动去除
- 输入有效数字后将输入的空白作为分隔符或者结束符
- next()不能得到带有空格的字符串。
package scanner;
import java.util.Scanner;
public class Demo {
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();
}
}
nextLine()
- 以Enter为结束符,输入回车前的所有字符
- 可以获得空白
package scanner;
import java.util.Scanner;
public class Demo2 {
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();
}
}
其他
- hasNextInt
- hasNextFloat
package scanner;
import java.util.Scanner;
public class Demo3 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int i=0;
float f=0.01f;
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("输入的小数为 " + f);
}
else {
System.out.println("输入的不是小数");
}
scanner.close();
}
}
练习
输入多个数字,求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束并输出执行结果。
package scanner;
import java.util.Scanner;
public class text {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
//和
double sum=0;
//输入了多少个数字
int m=0;
//通过循环判断是否还有输入,并对每一个进行求和统计
System.out.println("请输入数字");
while(scanner.hasNextDouble()) {
double x=scanner.nextDouble();
sum=sum+x;
m=m+1;
}
System.out.println("和为 "+ sum);
System.out.println("平均数为 "+ sum/m);
scanner.close();
}
}
顺序结构
从上至下
选择结构
if
if单选择结构
package struct;
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("请输入内容");
String s=scanner.nextLine();
if(s.equals("Hello")) {
//equals判断是否相等
System.out.println(s);
}
System.out.println("end");
scanner.close();
}
}
if双选择结构
if(布尔表达式){
//布尔表达式为true将执行的语句
}
else{
//布尔表达式为false将执行的语句
}
if多选择结构
if(布尔表达式1){
//布尔表达式1为true将执行的语句
}
else if(布尔表达式2){
//布尔表达式2为true将执行的语句
}
else if(布尔表达式3){
//布尔表达式3为true将执行的语句
}
else{
//布尔表达式都不为true将执行的语句
}
嵌套if
都可以嵌套
switch多选择结构
switch case 语句判断一个变量与一系列值中某个值是否相等,每一个值一个分支
switch(expression){
case value1:
break;
case value2:
break;
default:
}
package struct;
import java.util.Scanner;
public class switchDemo {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("请输入grade");
String grade=scanner.nextLine();
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("输入不正确");
break;
}
}
}
记得加break;否则会穿透!
循环结构
while
只要布尔表达式的值为true就会一直循环执行下去
避免死循环!
package struct;
public class whileDemo {
public static void main(String[] args) {
int i=1;
int sum=0;
while(i<=100)
{
sum=sum+i;
i++;
}
System.out.println("1-100的和为 "+sum);
}
}
do-while
不满足不进入循环,但至少会执行一次。
public class doWhileDemo {
public static void main(String[] args) {
int i=1;
int sum=0;
do {
sum=sum+i;
i++;
}
while(i<=100);
System.out.println("1-100的和为 "+sum);
}
}
for
package struct;
public class forDemo {
public static void main(String[] args) {
int i=1;
int sum=0;
for(i=1;i<=100;i++) {
sum=sum+i;
}
System.out.println("1-100的和为 "+sum);
}
}
练习
练习1
计算0-100之间奇数和偶数的和
public class forText {
public static void main(String[] args) {
// 计算0-100之间奇数和偶数的和
int i=0;
int sum1=0;
int sum2=0;
for(i=0;i<=100;i++) {
if(i%2==0) {
sum1=sum1+i;
}
if(i%2==0) {
sum2=sum2+i;
}
}
System.out.println("0-100偶数和为:"+sum1);
System.out.println("0-100奇数和为:"+sum2);
}
}
练习2
输出1-1000之间能被5整除的数,并每行输出3个。
- println 输出完会换行
- print 输出完不会换行
public class forText2 {
public static void main(String[] args) {
// 输出1-1000之间能被5整除的数,并每行输出3个。
for(int i=0;i<=1000;i++) {
if(i%5==0) {
System.out.print(i+"\t");
}
if(i%(5*3)==0) {
System.out.print("\n");
}
}
}
}
练习3 打印九九乘法表
思考
-
先打印第一列
-
把固定的1再用一个循环包起来
-
去掉重复,i<=j
-
调整样式,加制表符和换行(记得是print不是println)
public class forText3 { public static void main(String[] args) { System.out.println("九九乘法表"); for(int j=1;j<=9;j++) { for(int i=1;i<=j;i++) { System.out.print(j+"*"+i+"="+(j*i)+"\t"); } System.out.println(); } } }
break&continue
break
用于强行退出一层循环,不执行剩余的语句
continue
用于终止某次循环->会执行下一次循环判断
练习
打印101-150之间的所有质数
outer 标签
public class lableDemo {
public static void main(String[] args) {
//打印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.println(i);
}
}
}
练习
打印菱形
public class Text {
public static void main(String[] args) {
//打印菱形
Scanner scanner=new Scanner(System.in);
System.out.println("请输入菱形的行数");
int num=scanner.nextInt();
int MaxLine=(num+1)/2;
for(int i=1;i<=MaxLine;i++){
for(int s=MaxLine-i;s>0;s--) {
System.out.print(" ");
}
for(int j=1;j<=2*i-1;j++) {
System.out.print("* ");
}
System.out.print("\n");
}
for(int i=MaxLine-1;i>=1;i--){
for(int s=1;s<=MaxLine-i;s++) {
System.out.print(" ");
}
for(int j=1;j<=2*i-1;j++) {
System.out.print("* ");
}
System.out.print("\n");
}
scanner.close();
}
}
浙公网安备 33010602011771号