Java中的分支结构和循环结构作业
1.知识准备:Scanner用法
1.1注意
Java 中的扫描器,使用流程,请复制粘贴使用,选择合适的套餐
1. 在 public class 类名之上导包 ==> 点技能点
import java.util.Scanner;
2. 代码中准备 Scanner 变量,以备使用
Scanner sc = new Scanner(System.in);
3. 根据所需,选取对应的套餐,复制粘贴解决问题!!!
int类型数据
int类型变量 = sc.nextInt();
float类型数据
float类型变量 = sc.nextFloat();
double类型数据
double类型变量 = sc.nextDouble();
char类型数据
char类型变量 = sc.nextLine().charAt(0);
1.2【补充知识】
用户操作友好提示/操作引导提示
用户使用软件,需要在操作过程中,给予用户合理,合情,合适,友好的提示内容,方便用户使用我们的软件增强用户粘性!!!
1.3【补充知识】
用户输入数据合法性判断
在实际开发中:
用户提交数据需要根据实际情况来进行合法性判断,如果不合法,不可以进入正常的数据判断处理过程,中断程序运行,给予用户提示。
举个例子:
// if else-if 分支结构代码结构演示
/*
超市
消费满 100 ~ 200 元, 送绿箭
消费满 200 ~ 500 元, 送啤酒一瓶
消费满 500 ~ 1000 元, 送牛奶一箱
消费满 1000 ~ 2000 元, 送 199 零食大礼包
消费超 2000 元,送店
*/
import java.util.Scanner;
public class Demo7 {
public static void main(String[] args) {
int totalPrice = 0;
Scanner sc = new Scanner(System.in);
// 用户操作友好性提示
System.out.println("请输入您的消费金额:");
totalPrice = sc.nextInt();
// 用户输入数据之后,判断用户提供的数据是否合法
if (totalPrice <= 0) {
// 给予用户友好提示
System.out.println("亲,请输入正确的金额呦");
// 中断代码运行 直接关闭程序,俗称拉闸!!!后期不要使用!!
System.exit(0);
}
// 消费金额递增
if (totalPrice >= 100 && totalPrice < 200) {
System.out.println("尊贵的客户,送您一片绿箭");
} else if (totalPrice >= 200 && totalPrice < 500) {
System.out.println("尊贵的客户,送您一瓶崂山啤酒");
} else if (totalPrice >= 500 && totalPrice < 1000) {
System.out.println("尊贵的客户,送您一箱特仑苏");
} else if (totalPrice >= 1000 && totalPrice < 2000) {
System.out.println("尊贵的客户,送您 199 零食大礼包");
} else if (totalPrice >= 2000) {
System.out.println("尊贵的客户,店铺都送您!!!");
}
System.out.println();
/*
消费金额递减
对比上方的条件,递减方式
1. if 之后条件内容没有逻辑与判断,效率高
2. 代码量降低
3. 分析条件的罗列关系
*/
if (totalPrice >= 2000) {
System.out.println("尊贵的客户,店铺都送您!!!");
} else if (totalPrice >= 1000) {
System.out.println("尊贵的客户,送您 199 零食大礼包");
} else if (totalPrice >= 500) {
System.out.println("尊贵的客户,送您一箱特仑苏");
} else if (totalPrice >= 200) {
System.out.println("尊贵的客户,送您一瓶崂山啤酒");
} else if (totalPrice >= 100) {
System.out.println("尊贵的客户,送您一片绿箭");
} else {
System.out.println("尊贵的客户,送您一个塑料袋");
}
}
}
2.循环结构
2.1 为什么要用循环结构
代码中容易出现重复,复用代码,如果仅通过最为基础的Ctrl键+ CV 操作,会导致以下问题
1.代码冗余性
2.代码阅读性极差
3.代码维护性极差
2.2 while 循环结构
格式
while (/* 循环条件判断 boolean true or false */) {
// 循环体;
// (循环条件变更如:i++);
}
/*
执行流程:
代码执行 while 循环结构,首先判断 while 之后小括号中的循环条件是否为 true ,如果为 true 执行循环体,回到 while 之后小括号判断,直到循环条件为 false 终止循环!!!
*/
// while 循环结构演示
public class Demo3 {
public static void main(String[] args) {
// int 类型变量控制循环次数
int num = 1;
// while 小括号中,循环条件必须是一个 boolean 类型
// 无限循环解决方式: Ctrl + C
while (num <= 10) {
System.out.println("老师请我们每一个老师吃烤全羊");
num += 1; // or num++; or ++num;
}
}
}
2.3 do while 循环结构
// 格式
// 注意 结尾的分号,必须要有!!!
do {
// 循环体
// (循环条件变更)
} while (/* 循环条件判断 boolean true or false */);
/*
执行流程:
代码执行 do while 循环结构,首先执行一次循环体内容,再来判断 while 之后小括号中循环判断条件是否为 true,如果为 true 继续执行循环体,如果为 false 终止循环。
*/
// do while 循环结构
public class Demo4 {
public static void main(String[] args) {
// num 就可以认为是循环变量
int num = 1;
do {
System.out.println("老黑请我们吃烤全羊");
num += 1; // num++ or ++num 控制循环变量
} while (num <= 10);
}
}
2.4 for 循环结构【重点】
// 格式
for (/* 循环条件初始化 */; /* 循环条件判断 */; /* 循环条件变更 */) {
// 循环体
}
for 循环结构流程
// for 循环结构演示
public class Demo5 {
public static void main(String[] args) {
/*
常用的 for 循环方式
for 循环小括号中的不同条件使用 ; 分割
目前的 for 循环,循环次数 10 次
i 的值在循环过程的变化 0 1 2 3 4 5 6 7 8 9
*/
for (int i = 0; i < 10; i++) {
System.out.println("烤羊背");
}
}
}
循环第一次
i = 0; 0 < 10 成立,循环可以执行
i++; ==> i = 1
循环第二次
i = 1; 1 < 10 成立,循环可以执行
i++; ==> i = 2
循环第三次
i = 2; 2 < 10 成立,循环可以执行
i++; ==> i = 3
循环第四次
i = 3; 3 < 10 成立,循环可以执行
i++; ==> i = 4
循环第五次
i = 4; 4 < 10 成立,循环可以执行
i++; ==> i = 5
循环第六次
i = 5; 5 < 10 成立,循环可以执行
i++; ==> i = 6
循环第七次
i = 6; 6 < 10 成立,循环可以执行
i++; ==> i = 7
循环第八次
i = 7; 7 < 10 成立,循环可以执行
i++; ==> i = 8
循环第九次
i = 8; 8 < 10 成立,循环可以执行
i++; ==> i = 9
循环第十次
i = 9; 9 < 10 成立,循环可以执行
i++; ==> i = 10
循环第十一次:
i = 10; 10 < 10 不成立,循环终止!!!
3. 作业
1. 用户输入一个年份,判断这个年份是不是一个闰年
2. 输入两个整数,打印两数之差的绝对值。
3. 多种方法打印26个小写字母
4. 例如:
输入 5 8;
计算 5 + 6 + 7 + 8;
输出 26.
5. 整数逆序输出, 例如输入一个整数12345,输出5 4 3 2 1
6. 1 - 3 + 5 - 7 + 9 - 11 ... - 99 + 101 的结果
7. 15的阶乘
8.
*****
*****
*****
*****
*****
9.
*
**
***
****
*****
10.
*
***
*****
*******
*********
11.【拔高题】
*
***
*****
*******
*********
*******
*****
***
*
4.代码
/*
1. 用户输入一个年份,判断这个年份是不是一个闰年
判断是否为闰年: 能被4整除,但不能被100整除;或者可以被400整除
*/
import java.util.Scanner;
public class HomeWorlk1 {
public static void main(String[] args) {
//定义变量
int year = 0;
Scanner sc = new Scanner(System.in);
//用户友好性输入提示
System.out.println("请输入一个年份:");
year = sc.nextInt();
//用户输入数据合法性判断
if (year > 9999 || year <= 0) {
System.out.println("你输入的数据有误~~~");
System.exit(0);
}
//数据处理模块
if (year % 4 == 0 && year % 100 !=0 || year % 400 ==0) {
System.out.println("你提供的年份是闰年");
} else {
System.out.println("你提供的年份不是闰年");
}
}
}
/*
2. 输入两个整数,打印两数之差的绝对值。
*/
import java.util.Scanner;
public class HomeWorlk2 {
public static void main(String[] args) {
//定义变量
int num1 = 0;
int num2 = 0;
Scanner sc = new Scanner(System.in);
//用户友好性输入提示
System.out.println("请输入二个数字:");
num1 = sc.nextInt();
num2 = sc.nextInt();
//用户输入数据合法性判断
if (num1 < 0 || num2 < 0 ) {
System.out.println("你输入的数据有误~~~");
System.exit(0);
}
//数据处理模块 三元运算符处理 if...处理
int ret = num1 > num2 ? num1 - num2 : num2 - num1;
System.out.println(ret);
if (num1 > num2) {
System.out.println(num1-num2);
} else {
System.out.println(-(num1-num2));
}
}
}
/*
3. 多种方法打印26个小写字母
三种方法都可打印 记住它们对应的语句格式
*/
public class HomeWorlk3 {
public static void main(String[] args) {
char ch = 'a';
while (ch <= 'z') {
System.out.println(ch);
ch++;
/*
ch = ch + 1;【错误】 因为 1+ch ==> 被计算机当做是一个int类型来处理
数据类型没有一致化处理。
ch += 1;【正确】+=会将int类型数据自动转换为char类型数据,赋值给变量ch
ch++ 【正确选择】
*/
}
char h = 'a';
do {
System.out.println(h);
h += 1;
} while (h <= 'z');
for (char c = 'a'; c <= 'z'; c++) {
System.out.println(c);
}
}
}
/*
4. 例如:
输入 5 8;
计算 5 + 6 + 7 + 8;
输出 26.
利用等差数列前n项和
*/
import java.util.Scanner;
public class HomeWorlk4 {
public static void main(String[] args) {
//定义变量
int num1 = 0;
int num2 = 0;
Scanner sc = new Scanner(System.in);
//用户友好性输入提示
System.out.println("请输入二个数字:");
num1 = sc.nextInt();
num2 = sc.nextInt();
//用户输入数据合法性判断
if (num1 < 0 || num2 < 0 ) {
System.out.println("你输入的数据有误~~~");
System.exit(0);
}
//数据展示模块
if (num1 > num2) {
int ret1 = (num1 + num2) * (num1 - num2 + 1) / 2;
System.out.println(ret1);
} else {
int ret2 = (num1 + num2) * (num2 - num1 + 1) / 2;
System.out.println(ret2);
}
}
}
/*
5. 整数逆序输出, 例如输入一个整数12345,输出5 4 3 2 1
*/
import java.util.Scanner;
public class HomeWorlk5 {
public static void main(String[] args) {
//定义变量
int num = 0;
Scanner sc = new Scanner(System.in);
//用户友好性输入提示
System.out.println("请输入一个数字:");
num = sc.nextInt();
//用户输入数据合法性判断
if (num < 0 ) {
System.out.println("你输入的数据有误~~~");
System.exit(0);
}
for (int i = num; i > 0; i /= 10) {
System.out.println(i % 10);
}
}
}
/*
6. 1 - 3 + 5 - 7 + 9 - 11 ... - 99 + 101 的结果
方法一:找出规律 两个相近的和为-2 共计25组
方法二:定义变量 利用for循环进行实现
*/
public class HomeWorlk6 {
public static void main(String[] args) {
int ret = 101 - 25 * 2;
System.out.println(ret);
int i = 1;
int j = 1;
int sum = 0;
for (i = 1; i <= 101; i +=2) {
sum = sum + i * j;
j = -j; //改变符号
}
System.out.println(sum);
}
}
/*
7. 15的阶乘
【注意】数据类型范围
int 类型支持的最大阶乘 12
long 类型支持的最大阶乘 20
float类型支持的最大阶乘 34
double 类型支持的最大阶乘 170
如果采用 int 数据类型 会导致数据存储异常
数据结果已经超出 int 的数据类型范围
*/
public class HomeWorlk7 {
public static void main(String[] args) {
double sum = 1;
for (int i = 1; i <= 15; i++) {
sum = sum * i;
System.out.println(sum);
}
System.out.println(sum);
}
}
/*
8.
行(line) 星数*
***** 1 5
***** 2 5
***** 3 5
***** 4 5
***** 5 5
*/
public class HomeWorlk8 {
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) {
System.out.println("*****");
}
System.out.println("=========");
/* for-i外层循环 控制图形的总行数 */
for (int i = 1; i <= 5; i++) {
/* 每一次循环都是一行内容 每一行内容都是五个 * 符号 */
for (int j = 1; j <= 5; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
/*
9.
行数 星数
* 1 1
** 2 2
*** 3 3
**** 4 4
***** 5 5
【行号 == * 个数】
*/
public class HomeWorlk9 {
public static void main(String[] args) {
//for-i 仅控制循环 5 次 同时 i 可以换成int line = 初始值
for (int i = 1; i <= 5; i++) {
/*
i 对应行号,也就是当前循环进入的第几行
可以用于控制每一行的 * 号数目
*/
for (int j = 1; j <= i; j++) {
System.out.print('*');
}
System.out.println(' ');
}
}
}
/*
10. 行数 空格数 星数
* 1 4 1
*** 2 3 3
***** 3 2 5
******* 4 1 7
********* 5 0 9
分析:
当前控制行数用变量 i 来表示
空格数 总行数(5) - 当前行数(i)
星数 当前行数 i*2 - 1
*/
public class HomeWorlk10 {
public static void main(String[] args) {
// for-i 循环控制行数 一共是5行
for (int i = 1; i <= 5; i++) {
//内部模块 1 处理空格数 5为总行数 i为当前第几行
for (int j = 1; j <= 5 - i; j++ ) {
System.out.print(' ');
}
//内部模块 2 处理 * 符号 当前第几行 (i) *2 -1
for (int k = 1; k <= i * 2 - 1; k++) {
System.out.print('*');
}
System.out.println();
}
}
}
/*
11
*
***
*****
*******
*********
*******
*****
***
*
*/
public class HomeWorlk11 {
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= 5 - i; j++) {
System.out.print(' ');
}
for (int k = 1 ; k <= 2 * i - 1; k++) {
System.out.print('*');
}
System.out.println(); // 和题目10代码一样
}
for (int i = 1; i <= 4; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(' ');
}
for (int k = 1 ; k <= 2 * (5 - i) - 1; k++) {
System.out.print('*');
}
System.out.println(); // 找规律打印下面四行星数
}
}
}