1.本章内容
控制代码如何执行、是否执行、执行多少次。
2.程序结构
顺序结构
分支结构
循环结构
2.1分支结构
1.if(){}
2.if(){}else{}
3.if(){}else if(){}else if(){} else{}
分支结构主要控制代码是否执行。
案例:输入你的java成绩,如果在90以上,输出 秀儿! 在 70--90之间输出,有点秀儿! 60-70 之间输出 一般般!60以下输出 垃圾!
switch case
switch:用于固定值的分支判断,后面可以跟char,byte,short,int,String
不能跟 float,double,long
break可以省略,省略之后,代码会贯穿执行
switch(参数){
case value1:
代码块1;
break;
case value2:
代码块2;
break;
case value3:
代码块3;
break;
case value4:
代码块4;
break;
default:
代码块:
break;
}
首先用switch后边括号中的参数跟下边的value依次比较,如果第一个不满足就比较第二个,如果满足执行后边对应的代码块。(如果前边的条件都不满足)到 default为止。
案例:输入年和月,输出该年的该月有多少天?
/输入年和月,输出该年的该月有多少天?
/**
* 分析:
* 1,3,5,7,8,10,12 31天
* 4,6,9,11, 30天
* 2 闰年 29天 普通28天
*/
public static void main(String[] args) {
System.out.println("请输入年");
Scanner sc1 = new Scanner(System.in);
int year = sc1.nextInt();
System.out.println("请输入月");
int month = sc1.nextInt();
//逻辑
switch (month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
System.out.println("该月有31天");
break;
case 4:
case 6:
case 9:
case 11:
System.out.println("该月有30天");
break;
case 2:
//闰年的条件 能被400整除 或者 能被4整除并且不能被100整除
if (year%400==0 || year%4==0 && year%100!=0){
System.out.println("该月有29天");
}else{
System.out.println("该月有28天");
}
break;
default:
System.out.println("输入数据不合法");
break;
}
2.2循坏结构
2.2.1while循坏
循环四要素: ①初始化变量,②循环条件,③循环体,④循环变量的自增。
注意避免:
while(true) 如果这样,循环永远出不来。
while(false) 循环进不去。
案例:求1-100的和
public class Test1 {
public static void main(String[] args) {
int i=1;
int sum=0;
while(i<=10){
sum=sum+i;
if (sum>20){
System.out.println(i);
return;
}
i++;
}
System.out.println("1-10的和为:"+sum);
}
}
2.2.2do while 循坏
while 先判断再执行
do while 先执行一次再判断
do while至少会执行一次。
2.2.3for循环
for( 初始化变量①;判断条件②;步进表达式④){
循环体③;
}
① 初始化变量
②判断条件
③循环体
④循环变量的自增
①-》②-》③-》④-》②-》③-》④-》②-》③-》④。。。-》②如果条件不满足直接结束循环。
案例:九九乘法表
//99乘法表
(1)
for (int i = 1; i < 10; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(j+"*"+i+"="+i*j+" ");
}
System.out.println();
}
System.out.println("---------------------------------");
(2)
for (int i = 9; i >=1; i--) {
for (int j = 1; j <=i; j++) {
System.out.print(j+"*"+i+"="+i*j+" ");
}
System.out.println();
}
System.out.println("---------------------------------");
(3)
for (int i = 1; i < 10; i++) {
for (int j = 9; j >=i; j--) {
System.out.print(j+"*"+i+"="+i*j+" ");
}
System.out.println();
}
System.out.println("---------------------------------");
(4)
for (int i = 9; i >=1; i--) {
for (int j = 9; j >= i; j--) {
System.out.print(j+"*"+i+"="+i*j+" ");
}
System.out.println();
}
输出时,这些符号有特殊意义
2.2.4break和continue
循环案例
1.循环输入五次成绩,求和 求平均值 求最大值 求最小值
//循环录入数据,求和 求平均值 求最大值 求最小值。
double sum = 0;
double max = 0;
double min = 0;
for (int i = 1; i <= 5; i++) {
System.out.println("请输入第"+i+"次成绩");
Scanner sc = new Scanner(System.in);
double score = sc.nextDouble();
sum+=score;
//假设:默认第一个输入的数既是最大值 也是最小值 比武招亲打擂台
if(i==1){
max = score;
min = score;
}
if(max < score){
max = score;
}
if(min > score){
min = score;
}
}
System.out.println("和是"+sum+",平均值是"+sum/5+",最大值:"+max+";最小值:"+min);
2.有一个等式 12()34()56()78()9 = 59,括号中只能放加和减,如果要使等式成立,那么每个括号中应该放哪些符号。
分析:数学问题
括号中放+ 相当于 12 + 34 ===》 12 + 1*34
括号中放- 相当于 12 - 34 ===》 12 + (-1)*34
每一个括号中的值都有两种可能 1或者-1
有一个等式 12()34()56()78()9 = 59,
括号中只能放加和减,如果要使等式成立,那么每个括号中应该放哪些符号。
先转化成数学问题
12 + 34 - 56 + 78 - 9 = 59 ---》
12+(+1*)34+(-1*)56+(+1*)78+(-1*)9=59-->12+(a*)34+(b*)56+(c*)78+(d*)9 = 59
括号中只有两种情况要么+1 要么 -1
*/
for(int a=-1;a<2;a+=2){
for(int b=-1;b<2;b+=2){
for(int c=-1;c<2;c+=2){
for(int d=-1;d<2;d+=2){
if(12+a*34+b*56+c*78+d*9==59){
System.out.println(a+","+b+","+c+","+d);
}
}
}
}
}
3.计算sum=1-1/2+1/3-1/4+1/5-……+1/99的值。
//计算sum=1/1-1/2+1/3-1/4+1/5-……+1/99-1/100的值。
//sum = 1 - (1/2+...+1/100) + (1/3+...+1/99);
//方法一
double sum=0;
for (double i = 1; i < 101 ; i++) {
if(i%2==0){
sum-=1/i;
}else{
sum+=1/i;
}
}
System.out.println(sum);
//方法二
double i,j,sumi=0,sumj=0,sum=0;
for(i=2;i<=100;i+=2){
sumi += 1/i;
}
for(j=3;j<=99;j+=2){
sumj += 1/j;
}
sum = 1-sumi+sumj;
System.out.println(sum);
//方法三
double a = 0;
double b = -1;
for (double i = 1; i <=100; i++) {
b = b*(-1);
a += b*(1/i);
}
System.out.println(a);