一、嵌套if
思路:只有被嵌套的if语句是在另一个if语句条件满足的前提下才能去执行
package com.jichuyufa;
import java.util.*;
public class Demo_QianTaoIf {
public static void main(String[] args) {
//嵌套if
//需求:假如一个保险箱设了两道密码,内外各一道
//password1=123 password2=456;前提是第一道密码只有成功才能去打开第二道密码
//自己输入的密码用键盘录入,两道密码全部正确打开才能取到钱
Scanner sc=new Scanner(System.in);
System.out.println("请输入保险柜的密码:");
int password1=sc.nextInt();
if(password1==123){
System.out.println("恭喜你,成功打开了第一道密码锁");
System.out.println("请继续输入保险柜的密码:");
int password2=sc.nextInt();
if(password2==456){
System.out.println("恭喜你,成功打开了保险柜,可以取钱了!!");
}else {
System.out.println("触发警报!!");
}
}else {
System.out.println("触发警报!!");
}
}
}
二、Switch(选择结构)
switch (表达式/变量) {
case 1:
语句体1;
break;
case 2:
语句体2;
break;
...
default:
语句体n+1;
break;
}
package com.jichuyufa;
import java.util.*;
public class Demo_Switch {
public static void main(String[] args) {
//switch语句(选择结构)
//需求:买东西,输入数字 0--"包子" 1--"邵阳米粉" 2--"螺蛳粉" 3--"小米粥" 4--"烧麦" 其他数字--"不吃早餐"
Scanner sc=new Scanner(System.in);
System.out.println("请输入你的早餐编号,不准输入负数:");
int a=sc.nextInt();
switch (a){
case 0:
System.out.println("包子");
break;
case 1:
System.out.println("邵阳米粉");
break;
case 2:
System.out.println("螺蛳粉");
break;
case 3:
System.out.println("小米粥");
break;
case 4:
System.out.println("烧麦");
break;
default:
System.out.println("不吃早餐");
}
}
}
总结: Switch需要注意的地方
* 1.每个case后面必须加break(中断),否则会出现"代码穿透"现象
什么是代码穿透:如果case0没有加break,会输出case0和case1语句体的结果
* 2.default放在最后面,break可以省略,因为它后面已经是switch的}(代表已经结束)
* 3.default没有放在最后面,一定要加上break
* 4.变量的类型可以是byte,short,int,char类型,而在jdk1.7版本中加入了String,不能是long,float,double
* 5(了解)switch和多重if语句的区别
* 多重if一般用于区间的判断,而switch语句用于单个变量--对应的单个值的判断
* 6.switch语句什么时候结束
* 1.碰到break
* 2.碰到}(代表已经结束)
三、循环
理解循环的三要素:
1.循环变量的初始化;2.循环变量的改变;3.循环条件的判断
1.while循环
1.1 while循环的格式
1.循环变量的初始化
2.while(循环的条件判断){
//循环体---循环要做的事情
3.循环变量的改变 //作用:避免死循环
}
package com.jichuyufa;
public class Demo_While {
public static void main(String[] args) {
//跑圈
//1.循环变量的初始化
int count=0;
//2.循环条件的判断
while(count<10){
//3.循环体
System.out.println("跑第"+(count+1)+"圈");
//4.循环变量的改变
count++;
}
System.out.println("跑完了");
}
}
1.2 打印1--100之间所有的偶数
//打印1--100之间所有的偶数
int a=0;
while(a<=100){
//判断a是否为偶数 4/2--余数为0 4%2==0
//在这里如果不进行判断,那么就脱离我们的初衷了,必须每个数字都判断完
if(a%2==0){
System.out.println("偶数是:"+a);
}
a++;
}
1.3 while循环的执行流程
1.循环变量的初始化
2.判断条件
3.循环体
4.条件的改变
5.执行完之后又回到条件判断
6.循环体
7.条件的改变
8.执行完之后又回到条件判断
9.如果条件不满足就结束整个while循环
10.结束
while循环的循环变量在循环结束之后还可以接着使用
2.do..while循环
2.1 do..while循环的格式(了解,用的很少)
1.循环变量的初始化
do{
//循环体
2.循环变量的改变
}while(循环条件的判断); //注意:这里的逗号千万要记得加上
package com.jichuyufa;
public class Demo_DoWhile {
public static void main(String[] args) {
//循环变量的初始化
int i=1;
do{
//循环体
System.out.println("helloworld\t"+i);
//循环变量的改变
i++;
//循环条件的判断
}while(i<=10); //必须以;结尾
System.out.println(i); //12
}
}
细节:
1.do..while是先执行再判断的循环
2.do..while循环不管初始化如何,循环体至少要执行一次
结论:do..while循环的循环变量在循环结束之后还可以使用
2.2do..while循环的执行流程
1.循环变量的初始化
2.循环体
3.循环变量的改变
4.循环条件的判断
5.满足条件之后返回循环体
6.循环变量的改变
...
3.for循环
3.1 for循环的格式
for(循环变量的初始化;循环条件的判断;循环变量的改变){
//循环体
}
package com.jichuyufa;
public class Demo_For {
public static void main(String[] args) {
for(int i=1;i<=10;i++){
System.out.println("helloworld\t"+i);
}
System.out.println();
for(int i=1;i<=10;i++){ //i在上次循环结束后被销毁了,这里是重新开辟一个内存空间可以接着用变量i
System.out.println("helloworld\t"+i);
}
}
}
结论:
1.for循环的循环变量是在循环结束之后,会被垃圾回收器自动回收(可以减少内存的损耗,提高程序的效率),所以在循环外面找不到循环变量;
2.如果想在循环结束之后硬是要使用循环变量,可以把循环变量定义在循环外面,如下所示:
int i;
for(i=1;i<=10;i++){
//循环体
}
System.out.println(i); //i=11
3.2 for循环的执行流程
1.循环变量的初始化
2.循环条件的判断
3.循环体
4.循环变量的改变
5.循环条件的判断
6.循环体
7.循环变量的改变
...
四、三种循环的总结(区别)
1.while和for循环是先判断循环条件是否满足,再执行循环体,而do..while
循环是先执行一次循环体,然后再进行循环条件的判断
2.while和do..while循环的循环变量是在循环结束之后还可以继续使用,而
for循环的循环变量在循环结束之后会被垃圾回收器自动清除,出了for循环
循环变量就找不到了,这样做的目的是为了减少内存的损耗,提高程序的效率
五、跳转控制语句(两个关键字用来控制循环)
break(中断,退出):跳出整个循环,结束整个循环
continue:跳出本次循环,继续下次循环
六、嵌套循环
package com.jichuyufa;
/*输出如下图案:
*
***
*****
*******
*********
***********
*************
***************
*****************
*/
public class Demo_ForInFor {
//
public static void main(String[] args) {
for(int i=1;i<=9;i++){
for(int j=1;j<=i*2-1;j++){
System.out.print("*");
}
System.out.println();
}
}
}
注意:外循环执行一次,内循环全部执行完
七、累加思想(1--100的和)
int sum=0
for(int i=1;i<=100;i++){
sum=sum+i;
//新的苹果的总是=旧的苹果的总数+增量
}
System.out.println(sum);
int sum=0//初始化sum=0
当i=1 sum=0(前一个sum的值0)+1 (增量) //1
当i=2 sum=1(i=1时sum的总和1)+2(增量) //3
当i=3 sum=3(i=2时sum的总和3)+3(增量) //6
当i=4 sum=6(i=3时sum的总和6)+4(增量) //10
当i=5 sum=10(i=4时sum的总和10)+5(增量) //15
...
当i=99 sum=(98次之和)+99
当i=100 sum=(99次之和)+100
八、课后作业练习
package com.homework;
/*1.现在有一个银行保险柜,有两道密码。
想拿到里面的钱必须两次输入的密码都要正确。
如果第一道密码都不正确,那直接把你拦在外面;
如果第一道密码输入正确,才能有权输入第二道密码。
只有当第二道密码也输入正确,才能拿到钱!
(两道密码自己设)(嵌套if)*/
import java.util.*;
public class Hw1 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入密码:");
int password1=sc.nextInt();
if(password1==123){
System.out.println("恭喜你,打开了第一道密码");
System.out.println("请继续输入密码:");
int password2=sc.nextInt();
if(password2==456) {
System.out.println("恭喜你,可以取钱了!");
}else {
System.out.println("对不起,请重新输入..");
}
}else {
System.out.println("对不起,请重新输入..");
}
}
}
//运行结果:
请输入密码:
123
恭喜你,打开了第一道密码
请继续输入密码:
456
恭喜你,可以取钱了!
package com.homework;
/*2.分析以下需求,并用代码实现:(用switch实现)
1.功能描述:键盘录入月份,输出对应的季节
2.要求:
(1)键盘录入一个整数(代表月份,范围1-12)
(2)输出该月份对应的季节
3,4,5春季
6,7,8夏季
9,10,11秋季
12,1,2冬季
(3)演示格式如下:
请输入一个月份:3
控制台输出:3月份是春季*/
import java.util.*;
public class Hw2 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入月份(必须使用数字)");
int num=sc.nextInt();
switch (num){
case 3:
case 4:
case 5:
System.out.println("春季");
break;
case 6:
case 7:
case 8:
System.out.println("夏季");
break;
case 9:
case 10:
case 11:
System.out.println("秋季");
break;
case 12:
case 1:
case 2:
System.out.println("冬季");
break;
}
}
}
//运行结果:
请输入月份(必须使用数字)
1
冬季
package com.homework;
/*3、循环输出1到100之间的所有偶数*/
public class Hw3 {
public static void main(String[] args) {
for(int i=1;i<=100;i++){
if(i%2==0){
System.out.println(i);
}
}
}
}
package com.homework;
/*4.输出1900-2012的所有闰年
提示:定义一个int类型变量 year
year%4==0&&year%100!=0||year%400==0 时,year是闰年*/
public class Hw4 {
public static void main(String[] args) {
for(int year=1900;year<=2012;year++){
if((year%4==0&&year%100!=0)||year%400==0){
System.out.println(year+"是闰年");
}
}
}
}
//运行结果:
1904是闰年
1908是闰年
1912是闰年
1916是闰年
1920是闰年
1924是闰年
1928是闰年
1932是闰年
1936是闰年
1940是闰年
1944是闰年
1948是闰年
1952是闰年
1956是闰年
1960是闰年
1964是闰年
1968是闰年
1972是闰年
1976是闰年
1980是闰年
1984是闰年
1988是闰年
1992是闰年
1996是闰年
2000是闰年
2004是闰年
2008是闰年
2012是闰年
package com.homework;
/*5.输出10000-99999里面的所有回文数。
说明:即12321是回文数,个位与万位相同,
并且十位与千位相同。*/
public class Hw5 {
public static void main(String[] args) {
for(int i=10000;i<=99999;i++){
int ge=i/1%10;
int shi=i/10%10;
int bai=i/100%10;
int qian=i/1000%10;
int wan=i/10000%10;
if(ge==wan&&shi==qian){
System.out.println("回文数:"+i);
}
}
}
}
package com.homework;
/*6,打印100至999的水仙花数和个数
(水仙花数是一个三位数,各位数字的立方和等于该数本身);
例如:153=1*1*1+5*5*5+3*3*3是一个水仙花数*/
public class Hw6 {
public static void main(String[] args) {
for(int i=100;i<=999;i++){
int ge=i/1%10;
int shi=i/10%10;
int bai=i/100%10;
if(ge*ge*ge+shi*shi*shi+bai*bai*bai==i){
System.out.println("水仙花数:"+i);
}
}
}
}
//运行结果:
水仙花数:153
水仙花数:370
水仙花数:371
水仙花数:407
package com.homework;
/*7,求1---100的偶数的和?
a%2==0偶数*/
public class Hw7 {
public static void main(String[] args) {
int sum=0;
for(int i=1;i<=100;i++){
if(i%2==0){
sum=sum+i;
}
}
System.out.println(sum);
}
}
//运行结果:
2550
package com.homework;
/*8.计算1+1/2+1/3+1/4+1/5+1/6+1/7+1/8+1/9+1/10=?
提示: 分子永远是1,分母是1--10*/
public class Hw8 {
public static void main(String[] args) {
float sum=0;
for(int i=1;i<=10;i++){
sum=sum+(float) (1.0/i);
}
System.out.println(sum);
}
}
//运行结果:
2.9289684
package com.homework;
/*9.循环键盘录入5个学生的成绩,将这5个学生的成绩累加,最后输出结果。*/
import java.util.*;
public class Hw9 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int sum=0;
for(int i=1;i<=5;i++){
System.out.println("请输入第"+i+"个学生的成绩");
int score=sc.nextInt();
sum=sum+score;
}
System.out.println("5个学生的成绩总和:"+sum);
}
}
//运行结果:
请输入第1个学生的成绩
1
请输入第2个学生的成绩
2
请输入第3个学生的成绩
3
请输入第4个学生的成绩
4
请输入第5个学生的成绩
5
5个学生的成绩总和:15
package com.homework;
/*10.2006年培养学员8万人,每年增长25%,请问按此增长速度,到哪一年培训学员人数将达到20万人?*/
public class Hw10 {
public static void main(String[] args) {
double person=8;
int i=0; //i用于统计年数
while(person<=20){
i++;
person = person * (1 + (1.0 / 4));
}
System.out.println("第"+i+"年人数达到20万人");
}
}
//运行结果:
第2011年人数达到20万人
package com.homework;
/*
11.计算2000年的1月1到2008年的1月1日之间相隔有多少天。
(提示年有365天,润年有366天,循环从2000年到2008年结束)*/
public class Hw11 {
public static void main(String[] args) {
int i=0;
int j=0;
for(int year=2000;year<2008;year++){
if((year%4==0&&year%100!=0)||year%400==0){
i++;
}else {
j++;
}
}
int days=i*366+j*365;
System.out.println(days);
}
}
//运行结果:
2922
package com.homework;
/*12.计算2008年的1月1日,到2008年的9月1日相隔有多少天。
(提示:如果是润年的2月就有29天,平年的2月有28天。1、3、5、7、8*/
public class Hw12 {
public static void main(String[] args) {
int year=2008;
int days=0;
if((year%4==0&&year%100!=0)||year%400==0){
for (int month=1;month<9;month++){
switch (month){
case 1:
case 3:
case 5:
case 7:
case 8:
days=days+31;
break;
case 2:
days=days+29;
break;
case 4:
case 6:
days=days+30;
break;
}
}
}else {
for (int month=1;month<9;month++){
switch (month){
case 1:
case 3:
case 5:
case 7:
case 8:
days=days+31;
break;
case 2:
days=days+28;
break;
case 4:
case 6:
days=days+30;
break;
}
}
}
System.out.println(days);
}
}
//这个程序可以继续优化
//运行结果:
244