流程控制
用户交互Scanner
介绍
实现程序和人的交互,java.util.Scanner是java5的新特性,我们可以通过Scanner类来获取用户的输入
基本语法
Scanner s = new Scanner(System.in);
通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取之前我们一般需要使用hasNext()与hasNextLine()判断是否还有输入的数据
next()
1.一定要读取到有效字符后才可以结束输入
2.对输入有效字符之前遇到的空白,next()方法会自动将其去掉
3.只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符
4.next()不能得到带有空格的字符串
nextLine()
1.以Enter为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符
2.可以获得空白
顺序结构
java的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句执行
顺序结构是最简单的算法结构
语句与语句之间,框与框之间是从上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的,它是任何一个算法都离不开的一种基本算法结构
选择结构
if单选结构
语法:
if(布尔表达式){
执行代码
}
if双选结构
if(布尔表达式){
执行代码
}elex{
执行代码
}
if多选择结构
嵌套if结构
switch多选择结构
Switch case语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支
Switch语句中的变量类型可以是:
byte、short 、int或者char
从javaSE7开始
Switch支持字符串String类型
同时case标签必须为字符串常量或字面量
循环结构
while循环
结构
while循环的三要素
1.循环初始条件 2.循环判断条件 3.循环的改变条件
whlie(布尔表达式){
//循环内容
//循环迭代(改变条件)
}
只要布尔表达式为true,循环就会一直执行下去
一般情况下我们是会让循环停止下来的,需要一个让表达式失效的方式来结束循环
如果循环条件一直为true就会造成死循环,在正常编程中应该要尽量避免死循环。
do while循环
结构
do{
代码块
}while(布尔表达式);
它与while循环不一样之处在于,不管条件成立不成立都至少会执行一次
for循环
for循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构
for循环执行的次数是在执行前就确定了的
语法格式:
for(初始化;布尔表达式;更新迭代) {
//代码块
}
break&continue
break
break在任何循环语句的主体部分,都可以用break控制的流程。break用于强制退出循环,不执行循环中剩余的语句
continue
continue语句用在循环语句体中,用于终止某一次循环过程,跳过本次循环,执行下次条件成立的循环
练习
for循環案例
package pro;
import java.util.Scanner;
public class Exercise01 {
// 用户输入年和月,打印出这个月对应的日历信息
// 只需要得到两个条件:假设输入的时2022 12
// 1号是星期几 求出中间的总天数 = 【1900-2022)年的总天数+【1,12)月的总天数
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
// 1.用户输入年和月,保存到变量中
System.out.println("请输入年份:");
int year = input.nextInt();
System.out.println("请输入月份:");
int month = input.nextInt();
// 2.计算出年总天数
// 定义一个变量用来保存年的总天数
int day1 = 0;
for (int i = 1900; i < year; i++) {
// 判断拿到的这一年是闰年还是平年
if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {
day1 += 366;
} else {
day1 += 365;
}
}
// 测试
System.out.println("年的总天数:" + day1 + "天");
// 3.计算出这一年月的总天数 -- {1-12)月的总天数
// 定义一个变量用于存放{1-12)月的总天数
int day2 = 0;
for (int i = 1; i < month; i++) {
if (i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i == 10 || i == 12) {
day2 += 31;
} else if (i == 2) {
// 在对年进行判断 看是闰年还是平年
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
day2 += 29;
} else {
day2 += 28;
}
} else {
day2 += 30;
}
}
// 测试
System.out.println("月的总天数为:" + day2 + "天");
// 4.根据2和3的步骤计算出1号是周几
// 将拿到的年总天数+月总天数 % 一周(7)进行取模拿到每月一号为星期几
int index = 1 + (day1 + day2) % 7;
// 打印测试一下
System.out.println(index);
// 5.这个月有多少天
int days;
if(month == 1|| month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
days = 31;
} else if(month == 2) {
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
days = 29;
}else {
days = 28;
}
} else {
days = 30;
}
// 6.打印
//将星期先进行打印输出
System.out.println("日\t一\t二\t三\t四\t五\t六");
//先找到次月的一号将前面没有的打印制表符
for (int i = 0; i < index; i++) {
System.out.print("\t");//不换行
}
//将这个月的总天数打印出来
for (int i = 1; i <= days; i++) {
System.out.print(i);//直接打印这个月的天数
//如果打印输出没超过七行打印制表符加这个数字
if((i + index) % 7 == 0 ) {//当输出的这个天数 + 得到的每月一号为星期几 % 7 等于0时就打印换行否则就打印制表符
System.out.println();
} else {
System.out.print("\t");
}
}
}
}
九九乘法表 正-倒
package pro;
public class Demo01 {
public static void main(String[] args) {
//1.循环初始条件
int i = 1;
while(i <= 100) {//2.循环判断条件
//循环的具体操作
System.out.print("你怕不是哈!");
//3.循环的改变条件
i++;
}
for(int j = 0; j < 10; j++) {
System.out.println("You are Good!");
}
}
}
```java
package com.fan.struct;
public class ForExercise05 {
public static void main(String[] args) {
//打印九九乘法表
for (int j = 1; j <=9; j++) {
for (int i = 1; i <= j; i++) {
//先打印第一列
System.out.print(i + "*" + j + "=" + (j * i) + "\t");
}
System.out.println();
}
System.out.println("---------------------------------------------------");
for (int j = 9; j >= 1; j--){
for (int i = 1; i <= j; i++){
System.out.print(i + "*" + j + "=" + (j * i) + "\t");
}
System.out.println();
}
}
}
求出1-n的乘阶
package com.fan.struct;
import java.util.Scanner;
public class ForExercise06 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
int sum = 0;
for (int i = 1; i <= n; i++) {
//求出i对应的阶乘的值
int result = 1;//用于存放结果
for (int j = 1; j <= i; j++) {
result *= j;
}
sum += result;
}
System.out.println("1-n的阶乘和: " + sum);
input.close();
}
}