Day02的探索
条件语句与循环语句
当我看第一个if语句时,我觉得不过如此,直到慢慢出现套娃······直到出现循环,循环套娃···然后开始来回的看,一整天没有离开座位,在简单案例里推敲,练习。随手在手机备忘录里记录下那一刻给我印象的一切。因为此刻,只有这些是陪伴我的,回应我的。它们一样有千变幻化,但是万象于我唯一。事事回应是一种基本
一.条件语句
<1>条件语句之if
语法:
if(条件){
条件成立时执行的代码
}
- 如果 if 条件成立时的执行语句只有一条,是可以省略大括号滴!但如果执行语句有多条,那么大括号就是不可或缺的
- if 条件的布尔表达式成立时,才执行里面代码
- 当时的题目:判断数值 20 是否为偶数
public class HelloWorld {
public static void main(String[] args) {
int one = 20 ;//将20赋值给变量one
if(one%2==0){//判断是否为偶数。我们知道一个数除以2余数为0即为偶数
System.out.println("one是偶数");
}
}
}
2. if····else
语法:
if(条件的布尔表达式){
代码块1
}else{
代码块2
}
- 当时的题目:判断年龄25是否大于18,得到成年或未成年
public class HelloWorld {
public static void main(String[] args) {
int age=25;
if (age>=18){
System.out.println("成年");
}else{
System.out.println("未成年");
}
}
}
3. 多重if
语法:
if(条件1){
代码块1
}else if(条件2){
代码块2
}else{
代码块3
}
-
例:
public class HelloWorld { public static void main(String[] args) { int age=25;//定义变量age为25 if(age>60){//判断是否大于60 System.out.println("老年"); }else if(age>40){//判断是否大于40 System.out.println("中年"); }else if(age>18){//判断是否大于18 System.out.println("少年"); }else {//如果以上都不成立,则执行以下输出 System.out.println("童年"); } } }
4. 嵌套if
语法:
if(条件1){
if(条件2){
代码块1
}else{
代码块2
}
}else{
代码块3
}
-
可能会开始觉得前面判断的都是数值,那如果不是数值呢?
可以用 equals( ) 来判断字符串的内容是否相同,相同则ture,不同则false
-
例:
public class HelloWorld {
public static void main(String[] args) {
int score = 94;//score储存预赛成绩
String sex = "女";//定义sex为性别
if(score>80){//判断预赛成绩是否大于80
if(sex.equals("女")){//在满足大于80的前提下,判断性别是否为 女
System.out.println("进入女子组决赛");
}else{
System.out.println("进入男子组决赛");
}
}else{//判断不满足大于80的大前提下,直接输出下面结果
System.out.println("未进入决赛");
}
}
}
<2>条件语句之switch
当需要对选项进行等值判断时,使用 switch 语句更加简洁明了
语法:
switch(表达式){
case 值1:
执行代码块1
break;
case 值2:
执行代码块2
break;
case 值3:
执行代码块3
break;
default:
默认执行的代码
}
- 它的执行过程:
当 switch 后表达式的值和 case 语句后的值相同时,从该位置开始向下执行,直到遇到 break 语句 或者 switch 语句块结束;如果没有匹配的 case 语句则执行 default 块的代码。
- 有几点需要知道:
-
switch 后面小括号中表达式的值必须是整型或字符型
-
case 后面的值可以是常量数值,如 1、2;也可以是一个常量表达式,如 2+2 ;但不能是变量或带有变量的表达式,如 a * 2
-
case 匹配后,执行匹配块里的程序代码,如果没有遇见 break 会继续执行下一个的 case 块的内容,直到遇到 break 语句或者 switch 语句块结束
-
可以把功能相同的 case 语句合并起来
-
default 块可以出现在任意位置,也可以省略
当时我想了一个问题,如果没有break在句中,那么是不是全部都执行并输出?我立刻试验了一下,将全部break去掉,又试验在不同位置去掉它,结果发现这样的试验结果:
当没有break时,程序会从第一个值开始判断,在没有判断到符合的值时,不会输出,但是一旦判断到符合的值时,从当前位置开始往后所有的都会执行并输出,无论是否符合
例:
public class Demo2 {
public static void main(String[] args) {
char today='日';
switch (today){
case '一':
case '三':
case '五':
System.out.println("吃包子");
break;
case '二':
case '四':
case '六':
System.out.println("吃油条");
break;
default:
System.out.println("吃主席套餐");
}
}
}
此时输出结果为:吃主席套餐
①当把today 改为"一",并将第一个break去掉时:
public class Demo2 {
public static void main(String[] args) {
char today='一';
switch (today){
case '一':
case '三':
case '五':
System.out.println("吃包子");
case '二':
case '四':
case '六':
System.out.println("吃油条");
break;
default:
System.out.println("吃主席套餐");
}
}
}
此时输出结果为:
吃包子
吃油条
②当把today 改为"四",去除全部break:
public class Demo2 {
public static void main(String[] args){
char today='四';
switch (today){
case '一':
case '三':
case '五':
System.out.println("吃包子");
case '二':
case '四':
case '六':
System.out.println("吃油条");
default:
System.out.println("吃主席套餐");
}
}
}
此时输出结果为:
吃油条
吃主席套餐
二.循环语句
<1>循环语句之while
语法:
while(判断条件){
循环操作
}
执行过程:
1 >、 判断 while 后面的条件是否成立( true / false )
2 >、 当条件成立时,执行循环内的操作代码 ,然后重复执行< 1 >、< 2 >, 直到循环条件不成立为止
- 特点:先判断,后执行
例:
public class HelloWorld {
public static void main(String[] args) {
int i = 1; // 代表 1 - 5 之间的数字
// 当变量小于等于 5 时执行循环
while (i<=5) {
// 输出变量的值,并且对变量加 1,以便于进行下次循环条件判断
System.out.println(i);
i++;
}
}
}
2. do····while
语法:
do{
循环操作
}while(判断条件);
执行过程:
1>、 先执行一遍循环操作,然后判断循环条件是否成立
2>、 如果条件成立,继续执行< 1 > 、< 2 >,直到循环条件不成立为止
- 特点: 先执行,后判断
由此可见,do...while 语句保证循环至少被执行一次!
例:
public class HelloWorld {
public static void main(String[] args) {
int sum = 0; // 保存 1-50 之间偶数的和
int num = 2; // 代表 1-50 之间的偶数
do {
//实现累加求和
sum=sum+num;
num = num + 2; // 每执行一次将数值加2,以进行下次循环条件判断
} while (num<=50); // 满足数值在 1-50 之间时重复执行循环
System.out.println(" 50以内的偶数之和为:" + sum );
}
}
<2>循环语句之for
语法:
for(循环变量初始;循环条件;循环变量的变化){
循环操作
}
执行过程:
1>、 执行循环变量初始化部分,设置循环的初始状态,此部分在整个循环中只执行一次
2>、 进行循环条件的判断,如果条件为 true ,则执行循环体内代码;如果为 false ,则直接退出循环
3>、 执行循环变量变化部分,改变循环变量的值,以便进行下一次条件判断
4>、 依次重新执行< 2 >、< 3 >、< 4 >,直到退出循环
- 特点:相比 while 和 do...while 语句结构更加简洁易读
- while,do···while,for 三种循环可以相互替换
例:
public class HelloWorld {
public static void main(String[] args) {
int sum = 0; // 保存不能被3整除的数之和
// 循环变量 i 初始值为 1 ,每执行一次对变量加 1,只要小于等于 100 就重复执行循环
for (int i = 1; i<=100; i++){
// 变量 i 与 3 进行求模(取余),如果不等于 0 ,则表示不能被 3 整除
if (i % 3 != 0) {
sum = sum + i; // 累加求和
}
}
System.out.println("1到100之间不能被3整除的数之和为:" + sum);
}
}
一些点:
- for 关键字后面括号中的三个表达式必须用 “;” 隔开,三个表达式都可以省略,但 “;” 不能省略。
a. 省略“循环变量初始化”,可以在 for 语句之前由赋值语句进行变量初始化操作,
int num=10;
for(;num<=15;num++){
System.out.print("Hello");
}
b. 省略“循环条件”,可能会造成循环将一直执行下去,也就是我们常说的“死循环”现象。需要用break强制跳出
c. 省略“循环变量变化”,可以在循环体中进行循环变量的变化
for(int num=10;num<=15;){
System.put.print("Hello");
num++;
}
- for 循环变量初始化和循环变量变化部分,可以是使用 “,” 同时初始化或改变多个循环变量的值
for(int x=1,y=2;x<5;x++,y++){
System.out.print(x+"+"+y+"="(x+y));
}
同时给x,y赋值,循环变量x,y同时变化。
- 循环条件部分可以使用逻辑运算符组合的表达式,表示复杂判断条件,但一定注意运算的优先级。就像数学里面运算有优先级一样
<3>多重循环
我愿称之为套娃模式,循环里面套循环。三种循环语句可以自身嵌套,也可以相互嵌套,最常见的就是二重循环。在二重循环中,外层循环每执行一次,内层循环要执行一圈。
例:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("打印直角三角形");
// 外层循环控制行数
for (int i = 1; i<=3;i++ ) {
// 内层循环控制每行的*号数
// 内层循环变量的最大值和外层循环变量的值相等
for (int j = 1; j<=i ;j++ ) {
System.out.print("*");
}
// 每打印完一行后进行换行
System.out.println();
}
}
}
<4>循环跳转语句
1. break
break前面有提到,遇到break就是退出循环。
如:
public class HelloWorld {
public static void main(String[] args) {
// 保存累加值
int sum = 0;
// 从1循环到10
for (int i = 1; i <= 10; i++) {
// 每次循环时累加求和
sum = sum + i;
// 判断累加值是否大于20,一旦满足条件则退出循环
if (sum>20) {
System.out.print("当前的累加值为:" + sum);
//退出循环
break;
}
}
}
}
2. continue
continue 的作用是跳过循环体中剩余的语句执行下一次循环。感觉没有break那么绝,直接给你停止,退出。continue是过了、停了当前这一段循环,继续给你进入新的循环
比如实现1···10之间所有偶数之和
public class HelloWorld {
public static void main(String[] args) {
int sum = 0; // 保存累加值
for (int i = 1; i <= 10; i++) {
// 如果i为奇数,结束本次循环,进行下一次循环
if ( i%2!=0 ) {
continue;
}
sum = sum + i;
}
System.out.print("1到10之间的所有偶数的和为:" + sum);
}
}
一道题中学到的一些
题:任意给定一个小于10位的数,判断它是几位数。
public class Demo1 {
public static void main(String[] args) {
System.out.print("请输入初始值:");
int num = new Scanner(System.in).nextInt();
int count = 0;
if(num>=0 && num<=999999999){
while (num!=0){
num/=10;
count++;
}
System.out.println("您输入的是:"+count+"位数");
}else{
System.out.println("您输入的值不符合要求");
}
}
}
-
这题虽然假设给定的值为999,我本可以直接int num=999; 代入完事了。但是我不舒服,因为题目中说“任意“,可我怎么知道该是多少呢,如果一个软件程序要获得我输入的任意数值,如何获取呢?于是我学会了获取用户输入的值:
int num = new Scanner(System.in).nextInt();
如果是字符
String num = new Scanner(System.in).next();
然后得出上面的代码内容
-
到这没有结束,我又想为什么int num = new Scanner(System.in).nextInt();
后面是 nextInt 而不是 nextint。然后查了资料,发现理论还没到那个地步,但是这提醒我后面注意这些知识 -
还是没结束,因为我执行代码后,随意输入了一次为1999999999,一次为2999999999。发现第一次能得到“您输入的值不符合要求”,第二次却无法得到这个输出,我返回去查,去问一切网上、身边可能知道原因的人,最后得知我第二次输入的值超出了int的上限。所以在前面一篇内容里加入了int的内容,算是我课外零碎学到的东西吧。
-
最后我得知要用长整型long。然后我照葫芦画瓢,猜测应该也是nextLong,结果真对了··
import java.util.Scanner;
public class Demo1 {
public static void main(String[] args) {
System.out.print("请输入初始值:");
long num = new Scanner(System.in).nextLong();
int count = 0;
if(num>=0 && num<=999999999){
while (num!=0){
num/=10;
count++;
}
System.out.println("您输入的是:"+count+"位数");
}else{
System.out.println("您输入的值不符合要求");
}
}
}
终于得到:
请输入初始值:9999999999
您输入的值不符合要求
插一张不会博客,不会Typora时,搁手机里临时回顾复习记录的图
还有错别字哈哈哈
还