JavaSE基础 第六章 控制语句
文章目录
1. 控制语句概述
-
分类:
选择语句
循环语句
转向语句 -
选择语句也叫分支语句:
if
switch -
循环语句:
for
while
do…while -
转向语句:
break
continue
return ( 这个目前不需要学习, 后面讲方法的时候会使用. )
2. 选择语句
if
- 语法格式:
第一种写法:
if(布尔表达式){
java语句;
java语句;
}
这里的一个大括号{}叫做一个分支
执行原理:
如果布尔表达式的结果为true, 则执行大括号
中的程序, 否则大括号中的代码不执行.
第二种写法:
if(布尔表达式){ // 分支1
java语句;
}else{ // 分支2
java语句;
}
执行原理:
如果布尔表达式的结果为true, 则执行分支1
中的程序, 分支2不执行, 为false, 分支1不执行, 执行分支2.
第三种写法:
if(布尔表达式1){ // 分支1
java语句;
}else if(布尔表达式2){ // 分支2
java语句;
}else if(布尔表达式3){ // 分支3
java语句;
}...
执行原理:
先判断布尔表达式1, 为true, 执行分支1, 然后就结束了.
当表达式1为false, 则判断表达式2, 为true, 执行分支2, 结束.
...
-
注意:
对于if语句来说, 在任何情况下只能有1个分支执行, 不可能存在2个或者多个分支执行.
if语句只要有一个分支执行了, 整个if语句就结束了.凡是带有else的, 一定会保证有一个分支执行.
当分支只有一个java语句时, 大括号可以省略.
- 业务1:
public class IfTest01{
public static void main(String[] args){
// 业务1: 当sex为true时表示男, 为false时为女.
java.util.Scanner s = new java.util.Scanner(System.in);
boolean sex = s.nextBoolean();
/*
if(sex){
System.out.println('男');
}else{
System.out.println('女');
}
*/
// 改良, 使用三目运算符
System.out.println(sex ? '男' : '女');
if (sex)
System.out.println('男');
System.out.println("hello"); // 没有问题
// 错误: 有 'if', 但是没有 'else'
/*
else
System.out.println('女');
*/
}
}
- 业务2:
/*
业务要求:
1. 从键盘上接收一个人的年龄
2. 年龄要求为[0-150], 其他值表示非法, 需要提示非法信息
3. 根据人的年龄来动态的判断这个人属于生命的哪个阶段?
[0-5]婴幼儿
[6-10]少儿
[11-18]少年
[19-35]青年
[36-55]中年
[56-150]老年
4. 请使用if语句完成以上的业务逻辑.
*/
public class IfTest02{
public static void main(String[] args){
java.util.Scanner s = new java.util.Scanner(System.in);
System.out.print("请输入年龄: ");
int nianLing = s.nextInt();
/*
if(nianLing >= 0 && nianLing <= 5){
System.out.println("婴幼儿");
}else if(nianLing >= 6 && nianLing <= 10){
System.out.println("少儿");
}else if(nianLing >= 11 && nianLing <= 18){
System.out.println("少年");
}else if (nianLing >= 19 && nianLing <= 35){
System.out.println("青年");
}else if (nianLing >= 36 && nianLing <= 55){
System.out.println("中年");
}else if (nianLing >= 56 && nianLing <= 150){
System.out.println("老年");
}else {
System.out.println("非法信息, 请重新输入!");
}
*/
// 改进:
/*
if(nianLing < 0 || nianLing > 150){
System.out.println("非法信息, 请重新输入!");
}else if(nianLing <= 5){
System.out.println("婴幼儿");
}else if(nianLing <= 10){
System.out.println("少儿");
}else if(nianLing <= 18){
System.out.println("少年");
}else if (nianLing <= 35){
System.out.println("青年");
}else if (nianLing <= 55){
System.out.println("中年");
}else {
System.out.println("老年");
}
*/
// 再改进:
String str = "老年";
if(nianLing < 0 || nianLing > 150){
System.out.println("非法信息, 请重新输入!");
return; // 终止程序, 后期会讲
}else if(nianLing <= 5){
str = "婴幼儿";
}else if(nianLing <= 10){
str = "少儿";
}else if(nianLing <= 18){
str = "少年";
}else if (nianLing <= 35){
str = "青年";
}else if (nianLing <= 55){
str = "中年";
}
System.out.println(str);
}
}
- 业务3:
/*
业务3:
1. 接收一个学生的考试成绩, 根据考试成绩输出成绩的等级.
2. 等级:
优: [90-100]
良: [80-89]
中: [70-79]
及格: [60-69]
不及格: [0-59]
3. 要求成绩是一个合法的数字, 成绩必须在[0-100]之间, 成绩可能带有小数.
*/
public class IfTest03{
public static void main(String[] args){
java.util.Scanner s = new java.util.Scanner(System.in);
System.out.print("请输入你的成绩: ");
double chengJi = s.nextDouble();
String str = "优";
if (chengJi < 0 || chengJi > 100){
System.out.println("非法数字, 请重新输入!");
return;
}else if (chengJi <= 59){
str = "不及格";
}else if (chengJi <= 69){
str = "及格";
}else if(chengJi <= 79){
str = "中";
}else if(chengJi <= 89){
str = "良";
}
System.out.println(str);
}
}
- 业务4:
/*
业务4:
1. 接收天气的信息
1 : 雨天
0 : 晴天
2. 接收性别的信息
1 : 男
0 : 女
3. 要求:
当天气是雨天时:
女 : 打一把小花伞
男 : 打一把大黑伞
当天气时晴天时:
女 : 擦点防晒霜, 出去玩耍
男 : 直接走起, 出去玩耍
4. 需要使用if语句以及嵌套方式展现这个业务.
*/
public class IfTest04{
public static void main(String[] args){
java.util.Scanner s = new java.util.Scanner(System.in);
System.out.println("今天的天气如何: ");
int tianQi = s.nextInt();
System.out.print("请输入你的性别: ");
int sex = s.nextInt();
if (tianQi != 1 && tianQi != 0){
System.out.println("错误");
}else{
if (tianQi == 1){
if(sex == 0){
System.out.println("打一把小花伞");
}else if(sex == 1){
System.out.println("打一把大黑伞");
}
}else {
if(sex == 0){
System.out.println("擦点防晒霜, 出去玩耍");
}else if (sex == 1){
System.out.println("直接走起, 出去玩耍");
}
}
}
}
}
switch
- 语法格式:
switch(值){
case 值1:
java语句;
java语句...
break;
case 值2:
java语句;
java语句...
break;
case 值3:
java语句;
java语句...
break;
default:
java语句;
}
以上是一个完整的switch语句:
其中: break和default不是必须的
switch语句支持的值有:
支持int类型以及String类型( JDK8之后才开始支持String类型 ).
本质上只支持这两个, 但是byte, short, char也可以使用, 因为它们可以自动类型转换.
switch中"值" 与 "值1", "值2"比较时会使用"=="进行比较.
- 执行原理:
"值" 与 "值1"进行比较, 如果相同, 则执行该分支中的java语句, 然后遇到break, switch结束.
如果不相等, 会继续将"值" 与 "值2" 进行比较, 如果相同, 则执行该分支中的Java语句, 遇到break结束.
注意:
如果分支执行了, 但是分支最后执行了, 此时会发生case穿透现象
switch(值){
case 值1:
java语句;
java语句...
case 值2:
java语句;
java语句...
break;
此时会发生case穿透现象( 值与值1相同, 执行Java语句, 然后不与值2比较, 直接执行下面的java语句 )
所有的case都没有执行, 则执行default语句.
- 实验:
/*
错误: 不兼容的类型: 从long转换为int可能有损失
long x = 100L;
switch(x){
}
*/
byte b = 100;
switch(b){
}
short s = 100;
switch(s){
}
int i = 100;
switch(i){
}
char c = 'a';
switch(c){
}
String str = "stephen";
switch(str){
}
}
}
- 业务1:
/*
写一个完整的switch语句:
接收键盘输入, 根据输入的数字来判断星期几.
1 星期一
...
7 星期天
*/
public class SwitchTest01{
public static void main(String[] args){
java.util.Scanner s = new java.util.Scanner(System.in);
System.out.print("请输入1-7的整数: ");
int num = s.nextInt();
switch(num){
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
case 4:
System.out.println("星期四");
break;
case 5:
System.out.println("星期五");
break;
case 6:
System.out.println("星期六");
break;
case 7:
System.out.println("星期天");
break;
default:
System.out.println("输入错误, 请重新输入");
break;
}
// 改善:
/*
switch(num){
case 1:
case 2:
case 3:
case 4:
case 5:
System.out.println("weekday");
break;
case 6:
case 7:
System.out.println("weekend");
break;
default:
System.out.println("输入错误, 请重新输入");
break;
}
*/
}
}
- 业务2:
/*
1. 接收一个学生的考试成绩, 根据考试成绩输出成绩的等级.
2. 等级:
优: [90-100]
良: [80-89]
中: [70-79]
及格: [60-69]
不及格: [0-59]
3. 要求成绩是一个合法的数字, 成绩必须在[0-100]之间, 成绩可能带有小数.
4. 要求使用switch语句实现.
*/
public class SwitchTest02{
public static void main(String[] args){
java.util.Scanner s = new java.util.Scanner(System.in);
System.out.print("请输入你的成绩: ");
double score = s.nextDouble();
if( score > 100 || score < 0 ){
System.out.println("输入错误, 请重新输入");
return;
}
switch((int)(score / 10)){
default:
System.out.println("不及格");
break;
case 6:
System.out.println("及格");
break;
case 7:
System.out.println("中");
break;
case 8:
System.out.println("良");
break;
case 9:
System.out.println("优秀");
break;
}
// 改善:
/*
String str = "";
switch(grade){
default:
str = "不及格";
break;
case 6:
str = "及格";
break;
case 7:
str = "中";
break;
case 8:
str = "良";
break;
case 9:
case 10:
str = "优秀";
break;
}
System.out.println(str);
*/
}
}
3. 循环语句
- 为什么使用循环语句:
/*
要求在控制台上输出100个100
System.out.println(100);
System.out.println(100);
System.out.println(100);
System.out.println(100);
System.out.println(100);
...
这种方法有点复杂, 所以要使用循环语句来实现这个业务.
*/
public class ForTest01{
public static void main(String[] args){
int i = 0;
int count = 0; // 计算打印结果的个数
for(i = 1; i <= 100; i++){
System.out.println(100);
count++;
}
System.out.println("count = " + count);
}
}
for
- 语法格式:
for(初始化表达式; 布尔表达式; 更新表达式){
循环体; // 由Java语句构成
}
注意:
初始化表达式最先执行, 并且在整个循环中只执行一次
条件表达式的结果必须是布尔类型.
四个步骤都可省略.
- 执行原理:
依次执行:
初始化
布尔表达式
为ture, 执行下面, 为false则跳出循环
循环体
更新
然后循环:
布尔表达式
为ture, 执行下面, 为false则跳出循环
循环体
更新
直到布尔表达式为false
- for循环常见使用方式:
public class ForTest02{
public static void main(String[] args){
// 最简练的for循环
/*
for(;;){
System.out.println(1);
}
*/
// 最常见的for循环
// 一下循环中, int i = 0;只执行一次, i变量属于for循环中的局部变量, for循环结束之后,
// i的内存将被释放. i变量只能在for循环中使用.
for (int i = 0; i <= 10; i++){
System.out.println("i = " + i); // 0 1 ... 10
}
// i变量的作用域就扩大了.
int i = 0;
for (i = 0; i <= 10; i++){
System.out.println("i -> " + i); // 0 1 ... 10
}
System.out.println(i); // 11
// 变形
for (int k = 0; k <= 10;){
System.out.println("k -> " + k); // 0 1 ... 10
k++;
}
// 再变形
for (int k = 0; k <= 10;){
k++;
System.out.println("k -> " + k); // 1 2 ... 11
}
}
}
public class ForTest03{
public static void main(String[] args){
// 变形
for (int i = 10; i >= 0; i--){
System.out.println("i = " + i); // 10 9 ... 0
}
// 变形
for (int i = 0; i <= 10; i += 2){
System.out.println("i = " + i); // 0 2 ... 10
}
// 变形
for (int i = 1; i <= 10; i += 2){
System.out.println("i = " + i); // 1 3 ... 9
}
// 变形
for (int i = 100; i >= 0; i %= 3){
System.out.println("i = " + i); // 100 1 1 1 1 ...
}
}
}
- 业务1:
/*
业务1:
1. 使用for循环, 实现1-100所有奇数求和
2. 至少给出两种解决方案
*/
public class ForTest04{
public static void main(String[] args){
int i = 0;
int sum = 0;
// 第一种
for(i = 0; i <= 100; i++){
if(i % 2 != 0){
sum += i;
}
}
System.out.println("sum = " + sum); // 2500
// 第二种
/*
for(i = 1; i <= 100; i += 2){
sum += i;
}
System.out.println("sum = " + sum);
*/
}
}
- 嵌套:
/*
1. 所有合法的"控制语句"都可以嵌套使用
2. for循环嵌套一个for循环的执行原理:
for(){
// 在分析最外层for循环时, 把里面的for循环当作一个普通的java语句
for(){}
}
*/
public class ForTest05{
public static void main(String[] args){
for(int i = 0; i < 2; i++){
System.out.println("i = " + i); // 循环2次
}
for(int j = 0; j < 10; j ++){
System.out.println("j = " + j); // 循环10次
}
System.out.println("------------------------");
for(int i = 0; i < 2; i++){
for(int j = 0; j < 10; j ++){
System.out.println("j = " + j);
}
}
}
}
for(int k = 0; k < 2; k++){
for(int i = 0;i < 10; i++){
System.out.println("k = " + k); // 0 0 ... 0 1 1 ... 1
System.out.println("i --> " + i); // 0 1 ... 9 0 1 ... 9
}
}
/*
int i = 0;
for(int k = 0; k < 2; k++){
for(;i < 10; i++){
System.out.println("k = " + k); // 0 0 ... 0
System.out.println("i --> " + i); // 0 1 ... 9
}
}
*/
- 业务2:
/*
业务2:
1. 九九乘法表
1 * 1 = 1
1 * 2 = 2 2 * 2 = 4
1 * 3 = 3 2 * 3 = 6 3 * 3 = 9
...
1 * 9 = 9 2 * 9 = 18 ... 9 * 9 = 81
2. 特点:
共九行
第一行一个, 第二行两个, 第n行n个
*/
public class ForTest06{
public static void main(String[] args){
int i = 0;
for(i = 1; i < 10; i++){ // 9行, 循环9次, i是行号
for(int j = 1; j <= i; j++){ // 负责输出一行
System.out.print(j + " * " + i + " = " + (j * i) + " ");
}
System.out.println();
}
}
}
while
- 语法格式
while(布尔表达式){
循环体;
}
- 执行原理
判断布尔表达式的结果, 如果为true执行循环体, 循环结束后, 再判断布尔表达式, 为true,
执行循环体, 直到布尔表达式为false, 才终止循环.
- while循环执行的次数:
0~n次
- while和for本质上相同, 只不过语法格式不同.
do…while
- 语法结构:
do{
循环体;
}while();
- 执行原理:
先执行一次循环体, 再判断布尔表达式, 为true则执行循环体, 为false则结束循环.
- 注意:
do...while循环最后不要忘了分号( 因为while后面没有结束功能的大括号, 所以要使用分号来结束 )
- do…while的循环次数:
1~n次
- 常用使用方式:
public class DoWhileTest01{
public static void main(String[] args){
/*
int i = 0;
do{
System.out.println("i = " + i);
i++;
}while(i <= 10); // 0 1 ... 10
*/
// 变形
/*
int i = 0;
do{
System.out.println(i++);
}while(i <= 10); // 0 1 ... 10
*/
// 变形
int i = 0;
do{
System.out.println(++i);
}while(i <= 10); // 1 2 ... 11
do{
System.out.println("Hello world");
}while(false);
}
}
4. 转向语句
break
- break语句比较特殊, 特殊在: break语句是一个单词成为了一个java语句
continue也是如此 - break语句的使用位置:
用于switch语句当中
用于循环当中
- 案例1:
public class BreakTest01{
public static void main(String[] args){
for(int i = 0; i <= 10; i++){
if(i == 5){
// break语句会让离它最近的循环终止.
break; // 针对的是离它最近的循环, 而不是这个if语句
}
System.out.println("i = " + i); // 0 1 2 3 4
}
System.out.println("HelloWorld"); // break终止的是for循环, 与循环以外的语句无关, 所以这里的语句照常执行
}
}
- 案例2:
for(int j = 0; j < 2; j++){
for(int i = 0; i <= 10; i++){
if(i == 5){
break; // 针对的是离它最近的循环
}
System.out.println("i = " + i); // 0 1 2 3 4 0 1 2 3 4
}
}
continue
- continue要和break对比着学
- continue语句作用:
终止当前本次循环, 直接进入更新表达式, 然后执行下一次循环.
- 案例1:
public class ContinueTest01{
public static void main(String[] args){
for(int i = 0; i <= 10; i++){
if(i == 5){
break;
}
System.out.println("i = " + i); // 0 1 2 3 4
}
System.out.println("--------------------");
for(int i = 0; i <= 10; i++){
if(i == 5){
continue; // 执行continue后, 这之后的语句将不会执行, 跳到i++, 然后执行下一次循环
}
System.out.println("i = " + i); // 0 1 2 3 4 6 7 8 9 10 , 没有5
}
}
}
5. 章节练习
/*
第一题:编写 java 程序,用循环结构打印如下的数值列表:
1 10 100 1000
2 20 200 2000
3 30 300 3000
4 40 400 4000
5 50 500 5000
第二题:打印 2 到 10000 的所有素数,每行显示 8 个素数。
第三题:编写程序,计算 5 的阶乘。
第四题:控制台输入年龄,根据年龄输出不同的提示。
第五题:篮球从 5 米高的地方掉下来,每次弹起的高度是原来的 30%,经过几次弹起,篮球的高度是 0.1 米
*/
day08作业
1、根据指定月份,打印该月份所属的季节。
3,4,5 春季
6,7,8 夏季
9,10,11 秋季
12, 1, 2 冬季
if和switch各写一版
2、从键盘接收一个数字,判断该数字的正负。
3、从键盘接收一个数字,判断该数字的奇偶。
4、整数大小比较:输入两个整数,比较大小,
若x>y 输出 >
若x=y 输出 =
若x<y 输出 <
5、编写程序,由键盘输入三个整数分别存入变量num1,num2,num3中,对它们进行排序,
使用if-else结构,并按从小到大的顺序输出
6、打车起步价8元(3KM以内)
超过3KM,超出的每公里1.2元
超过5KM,超出的每公里1.5元
请在键盘上接收公里数,得出总价。
day09作业
1、计算1000以内所有不能被7整除的整数之和
2、计算 1+2-3+4-5+6-7....+100的结果
3、从控制台输入一个正整数,计算该数的阶乘。例如输入5,阶乘为 5*4*3*2*1
4、从控制台接收一个正整数,判断该数字是否为质数
质数(质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数)
5、从键盘接收一个正整数,该正整数作为行数,输出以下图形
*
***
*****
*******
*********
例如:输入5,则打印如上图5行。
6、小芳的妈妈每天给她2.5元钱,她都会存起来,但是,每当这一天是存钱的第5天
或者5的倍数的话,她都会花去6元钱,请问,经过多少天,小芳才可以存到100元钱。
7、一个数如果恰好等于它的因子之和,这个数就是完数,例如 6 = 1 + 2 + 3,编程
找出1000内所有的完数。
8、给一个不多于5位的正整数,
要求:
一、求它是几位数
二、逆序打印出各位数字
day10作业
1、题目:一个5位数,判断它是不是回文数。即12321是回文数,
个位与万位相同,十位与千位相同
2、题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,
还不瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了
一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上
想再吃时,只剩下一个桃子了。求第一天共摘了多少
3、题目:计算 1! + 2! + 3! + 4! +... + 10!
说明:4! 表示4的阶乘。4的阶乘是:1 * 2 * 3 * 4
4、题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半再落下,
求它在第10次落地时,共经过多少米
5、一个四位数,恰好等于去掉它的首位数字之后所剩的三位数的3倍,这个
四位数是多少?
day11作业
1、编写一个方法,求整数n的阶乘,例如5的阶乘是1*2*3*4*5
思考:这个方法应该起什么名字,这个方法的形参是什么,方法的返回值类型是什么。
2、编写一个方法,输出大于某个正整数n的最小的质数。
思考:这个方法应该起什么名字,这个方法的形参是什么,方法的返回值类型是什么。
3、画出以下程序运行过程的内存图
public class Test{
public static void main(String[] args){
int a = 100;
int b = 200;
int retValue = m1(a, b);
System.out.println(retValue);
}
public static int m1(int x, int y){
int k = x * 10;
int m = y * 10;
int result = m2(k, m);
return result;
}
public static int m2(int c, int d){
int e = c / 2;
int f = d / 2;
int i = e + f;
return i;
}
}
6. 习题答案
// 第二题:打印 2 到 1000 的所有素数,每行显示 8 个素数
// 素数: 除了1和它本身以外不再有其它因数
/*
第一步: 取出2到1000之间的正整数i
第二步: 再取出2到i-1之间的正整数j
第三步: 试除( 将i除以j, 如果可以整除则该数不是质数 )
第四步: 2到i-1的数都试除后, 发现都不能整除, 此时的j和i相等, 则i为质数
*/
int i = 0;
int num = 0;
for(i = 2; i <= 1000; i++){
int j = 2;
for(; j <= i - 1; j++){
if(i % j == 0){
break;
}
}
if(i == j){
num++;
System.out.print(i + " ");
if(num % 8 == 0){
System.out.println();
}
}
}
// 第三题:编写程序,计算 5 的阶乘
/*
int i = 0;
int jieCheng = 1;
for(i = 1; i <= 5; i++){
jieCheng *= i;
}
System.out.println(jieCheng); // 120
*/
// 第四题:控制台输入年龄,根据年龄输出不同的提示.
/*
java.util.Scanner s = new java.util.Scanner(System.in);
System.out.print("请输入你的成绩: ");
double score = s.nextDouble();
if( score > 100 || score < 0 ){
System.out.println("输入错误, 请重新输入");
return;
}
int grade = (int)(score / 10);
String str = "";
switch(grade){
default:
str = "不及格";
break;
case 6:
str = "及格";
break;
case 7:
str = "中";
break;
case 8:
str = "良";
break;
case 9:
case 10:
str = "优秀";
break;
}
System.out.println(str);
*/
// 第五题:篮球从 5 米高的地方掉下来,每次弹起的高度是原来的 30%,经过几次弹起,篮球的高度是 0.1 米
/*
double height = 5.0;
int count = 0;
for(; height > 0.1; count++){
height *= 0.3;
}
System.out.println(count);
*/
}
}
day08
/*
1. 方法一if:
java.util.Scanner s = new java.util.Scanner(System.in);
System.out.print("请输入一个月份: ");
int month = s.nextInt();
String str = "春季";
if(month > 12 || month < 1){
System.out.println("输入错误");
return;
}else if(month == 12 || month <= 2){
str = "冬季";
}else if(month >= 9){
str = "秋季";
}else if(month >= 6){
str = "夏季";
}
System.out.println(str);
*/
/*
方法二switch:
java.util.Scanner s = new java.util.Scanner(System.in);
System.out.print("请输入一个月份: ");
int month = s.nextInt();
String str = "输入错误";
if(month >= 1 && month <=12){
switch(month){
case 3:
case 4:
case 5:
str = "春季";
break;
case 6:
case 7:
case 8:
str = "夏季";
break;
case 9:
case 10:
case 11:
str = "秋季";
break;
default:
str = "冬季";
}
}
System.out.println(str);
*/
/*
2.
java.util.Scanner s = new java.util.Scanner(System.in);
System.out.print("请输入一个数字: ");
double num = s.nextDouble();
String str = "负";
if(num > 0){
str = "正";
}else if(num == 0){
str = "非正非负";
}
System.out.println(str);
*/
/*
3.
java.util.Scanner s = new java.util.Scanner(System.in);
System.out.print("请输入一个数字: ");
int num = s.nextInt();
if(num % 2 == 0){
System.out.println("偶数");
}else {
System.out.println("奇数");
}
*/
/*
4.
java.util.Scanner s1 = new java.util.Scanner(System.in);
java.util.Scanner s2 = new java.util.Scanner(System.in);
System.out.print("请输入两个数字: ");
int x = s1.nextInt();
int y = s2.nextInt();
String str = "=";
if(x > y){
str = ">";
}else if(x < y){
str = "<";
}
System.out.println(str);
*/
/*
5.
java.util.Scanner s1 = new java.util.Scanner(System.in);
java.util.Scanner s2 = new java.util.Scanner(System.in);
java.util.Scanner s3 = new java.util.Scanner(System.in);
System.out.print("请输入三个数字: ");
int num1 = s1.nextInt();
int num2 = s2.nextInt();
int num3 = s3.nextInt();
int tmp = 0;
if(num1 > num2){
tmp = num2;
num2 = num1;
num1 = tmp;
}
if(num1 > num3){
tmp = num3;
num3 = num1;
num1 = tmp;
}
if(num2 > num3){
tmp = num3;
num3 = num2;
num2 = tmp;
}
System.out.println("小" + num1 + ",中" + num2 + ",大" + num3);
*/
/*
6.
java.util.Scanner s = new java.util.Scanner(System.in);
System.out.print("请输入公里数: ");
double km = s.nextDouble();
double price = 8;
if(km > 5){
price = 8 + 1.2 * 2 + (km - 5) * 1.5;
}else if(km > 3){
price = 8 + (km - 3) * 1.2;
}
System.out.println(price);
*/
day09
//1、计算1000以内所有不能被7整除的整数之和
/*
int i = 0;
int sum = 0; // sum变量, 用于存储求和的结果
// 循环时想for, while, do...while
for(i = 0; i <= 1000; i++){ // 第一步
// 判断时想if, switch
if(i % 7 != 0){ // 第二步, 此时的i是不能被7整除的, 此时这个i应该纳入求和
sum += i; // 第三步, 求和
}
}
// 在for循环结束之后, 结果计算才完成, 所以在这里输出
System.out.println("sum = " + sum);
*/
//2、计算 1+2-3+4-5+6-7....+100的结果
/*
// 方法二:
int i = 0;
int j = 0;
int sum1 = 0;
int sum2 = 0;
for(i = 2; i <= 100; i += 2){
sum1 += i;
}
for(j = 3; j <= 100; j += 2){
sum2 += j;
}
System.out.println(sum1 - sum2 + 1); // +1是题目要求
*/
/*
// 方法一:
int i = 0;
int sum = 1; // sum的初始值是1而不是0
for(i = 2; i <= 100; i++){ // i从2开始
if(i % 2 != 0){ // 奇数-
sum -= i;
}else { // 偶数+
sum += i;
}
}
System.out.println(sum);
*/
// 3、从控制台输入一个正整数,计算该数的阶乘。例如输入5,阶乘为 5*4*3*2*1
/*
java.util.Scanner s = new java.util.Scanner(System.in);
System.out.print("请输入一个正整数: ");
int i = s.nextInt();
int jieCheng = 1; // 初始值不能为0, 否则乘积就为0了
for(int j = 1; j <= i; j++){
jieCheng *= j;
}
System.out.println(jieCheng);
*/
// 4、从控制台接收一个正整数,判断该数字是否为质数
// 质数(质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数)
// 第一步: 接收一个正整数
// 第二步: 取出从2开始到该正整数的自然数
// 第三步: 让该正整数对这些自然数( 大于等于2, 小于该正整数 )取模, 判断该结果是否为0, 如果为0, 则直接跳出循环
// 第四步: 当这些自然数都试除完之后, 此时的自然数经过循环后的调整++后, 与该正整数相等了, 则该数为质数
java.util.Scanner s = new java.util.Scanner(System.in);
System.out.println("请输入一个正整数: "); // 第一步
// 方法一:
/*
int i = s.nextInt();
int j = 0;
for(j = 2; j < i; j++){ // 第二步
if(i % j == 0){ // 第三步
System.out.println("该数不是质数");
break; // 为了效率, 这里要终止循环
}
}
if(i == j){ // 第四步
System.out.println("该数是质数");
}
*/
// 方法二( 主要练习打布尔标记 ):
/*
int i = s.nextInt();
int j = 0;
// 准备一个布尔类型的标记
boolean zhiShu = true; // true表示质数
for(j = 2; j < i; j++){
if(i % j == 0){
zhiShu = false; // false表示不是质数
break; // 为了效率, 这里要终止循环
}
}
System.out.println(i + (zhiShu ? "是" : "不是") + "质数"); // 三目运算符, 判断布尔类型标记是否为质数
*/
// 5、从键盘接收一个正整数,该正整数作为行数,输出以下图形
// *
// ***
// *****
// *******
//*********
// 例如:输入5,则打印如上图5行。
// 第一步: 接收一个正整数
// 第二步: 外层循环控制行号
// 第三步: 内层循环1控制空格( 2n-1 )
// 第四步: 内层循环2控制星号( 总行数-行号 )
// 第五步: 一行结束后, 要执行换行
// 控制空格
// 第一行是一个
// 第二行是三个
// 第三行是五个
// 第n行是2n-1个
// 控制星号
// 第一行是四个(5-1)
// 第二行是三个(5-2)
// 第三行是二个(5-3)
// 第四行是一个(5-4)
// 第五行是0个(5-5)
// 第n行是总行数-行号
/*
java.util.Scanner s = new java.util.Scanner(System.in);
System.out.println("请输入一个正整数( 作为行号, 输出图形 ): ");
int rows = s.nextInt();
// 6行循环6次
// n行循环n次
for(int i = 0; i < rows; i++){ // 外层循环控制的是总行数
// 在这里需要将一行全部输出
// 这里需要再次使用循环, 输出空格以及"*" // 内层循环控制的是内容
// 控制空格
for(int j = 0; j < rows - i; j++){
System.out.print(" ");
}
// 控制星号
for(int k = 0; k < (2 * i - 1); k++){
System.out.print("*");
}
// 以上两个for循环都结束之后, 表示一行就结束了
// 在这里换行
System.out.println();
}
*/
//6、小芳的妈妈每天给她2.5元钱,她都会存起来,但是,每当这一天是存钱的第5天
//或者5的倍数的话,她都会花去6元钱,请问,经过多少天,小芳才可以存到100元钱。
/*
double i = 0;
int day = 0;
while(i < 100){
i += 2.5;
day++;
if(day % 5 == 0){
i -= 6;
}
}
if(i >= 100){
System.out.println("第" + day + "天, " + "存到了" + i + "元");
}
*/
// 7、一个数如果恰好等于它的因子之和,这个数就是完数,例如 6 = 1 + 2 + 3,编程
// 找出1000内所有的完数。
// 第一步: 取出1到1000之间的所有整数
// 第二步: 判断该数是否为完数
// 第三步: 找到该数的因子
// 第四步: 如果等于该数, 则是完数, 否则不是完数
/*
int i = 0;
int j = 0;
for(i = 2; i <= 1000; i++){ // 第一步
// 第二步: 判断i是否为完数
// 第三步: 找到该数的因子
int sum = 0;
for(j = 1; j <= i / 2; j++){
if(i % j == 0){
// 此时的j就是因子
sum += j;
}
}
if(i == sum){
System.out.println(i);
}
}
*/
// 8、给一个不多于5位的正整数,
// 要求:
// 一、求它是几位数
// 二、逆序打印出各位数字
/*
java.util.Scanner s = new java.util.Scanner(System.in);
System.out.print("请输入一个不小于5位的正整数: ");
int i = s.nextInt();
int weiShu = 0;
for(; i != 0; i /= 10){
weiShu++;
System.out.print((i % 10)); // 逆序打印
}
if(i == 0){
System.out.println();
System.out.println("这个数是" + weiShu + "位数");
}
*/
day10
/*
1.
java.util.Scanner s = new java.util.Scanner(System.in);
System.out.print("请输入一个五位的正整数 ");
int num = s.nextInt();
for(int i = 1; i <= 4; i++){
num /= 10;
int yuShu = num % 10;
}
int x = 12321;
int a = 0, b = 0;
int c = x;
while (c!=0)
{
a = c % 10;
b = b * 10 + a;
c = c / 10;
}
if(b==x){
System.out.print("是回文数");
}else{
System.out.print("不是回文数");
}
*/
/*
2.
int day = 1;
int num = 900;
for(num = 900; num <= 5000; num++){
for(day = 1; day <= 10; day++){
num = num / 2 - 1;
if(day == 10 && num == 1){
System.out.println(num);
}
}
}
*/
/*
int num = 1;
int day = 10;
System.out.println("第" + day + "天有桃子:" + num);
for (day = 9; day >= 1; day--) {
num = 2 * (num + 1);
System.out.println("第" + day + "天有桃子:" + num);
}
System.out.println("猴子在第1天摘了" + num + "个桃子");
*/
/*
3.
int i = 1;
int jieCheng = 1;
int sum = 0;
for(i = 1; i <= 10; i++){
jieCheng *= i;
sum += jieCheng;
}
System.out.println(sum);
*/
/*
4.
int i = 1;
int height = 100;
int sum = 0;
for(i = 1; i <= 10; i++){
sum += height;
height /= 2;
}
System.out.println(sum);
*/
/*
5.
int i = 1000;
for(i = 1000; i <= 9999; i++){
if(i == i % 1000 * 3){
System.out.println(i + " ");
}
}
*/