第一节、程序结构
顺序结构
分支机构
循环结构
第二节、分支结构
if分支:
1.if后面的大括号可以省略(后面只有一条语句的时候)
2.if后面的语句有多条的时候,一定要加大括号
3.else同理
建议:不管分支条件后面有几条语句,一定要加大括号,把多条语句变为一个整体
- if(){}
- if(){}else{}
- if(){}else if(){}else if(){} else{}
分支结构主要控制代码是否执行。
案例:输入你的java成绩,如果在90以上,输出 秀儿! 在 70--90之间输出,有点秀儿! 60-70 之间输出 一般般!60以下输出 垃圾!
switch case
//与if分支的区别:
1.if的条件是一个范围
2.switch的条件是一个固定值
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;
}
//创建java输入工具类对象
Scanner scanner = new Scanner(System.in);
String name = scanner.next(); //next():接受输入的字符串内容
int age = scanner.nextInt(); //nextInt():可以将用户输入的字符串转为整型
double tall = scanner.nextDouble(); //nextDouble():可以将输入的字符串转为小数
boolean hasFriend = scannner.nextBoolean(); //nextBoolean():将输入的内容转为布尔值
第三节、循环结构
循环分类: 固定次数循环,不定次数循环
1.while 循环
可以用于固定次数循环,也可用于不定次数循环,先进行条件判断,再做循环处理
循环四要素: ①初始化变量,②循环条件,③循环体,④循环变量的自增。
注意避免:
while(true) 如果这样,循环永远出不来。
while(false) 循环进不去。
案例1:
代码实现:
三要素:条件,执行的代码,变量自增
2. do while循环
可以用于固定次数循环,也可用于不定次数循环,先做一次处理,再进行条件判断
while 先判断再执行
do while 先执行一次再判断
do while至少会执行一次。
3.for循环
一般用于固定次数循环
for( 初始化变量①;判断条件②;步进表达式④){
循环体③;
}
① 初始化变量
②判断条件
③循环体
④循环变量的自增
①-》②-》③-》④-》②-》③-》④-》②-》③-》④。。。-》②如果条件不满足直接结束循环。
案例:99乘法表
//99乘法表
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("---------------------------------");
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("---------------------------------");
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("---------------------------------");
for (int i = 9; i >=1; i--) {
for (int j = 9; j >= i; j--) {
System.out.print(j+"*"+i+"="+i*j+" ");
}
System.out.println();
}
输出时,这些符号有特殊含义:
4.循环控制关键字 break和continue
break:遇到break循环终止执行,与循环结合使用,代码会继续向下执行循环后面的内容
如果有多重循环,break只退出离他最近的循环
return:与方法结合使用,当遇到return关键字的时候,方法执行结束,return后面的代码不再执行
continue:遇到continue会跳过continue后面的代码不执行,换行进入下次循环
不定次数循环:
//吃包子
Scanner scanner = new Scanner(System.in);
//定义变量,统计包子的个数
int count = 0;
while(true){
System.out.println("吃一个包子");
count++;
//询问
System.out.println("请问你吃饱了吗(Y/N)");
//回答
String answer = scanner.next();
//作为循环终止的条件
if(answer.equals("Y")){ //字符串判断不能用==
System.out.println("下次再来!");
break;
}
}
System.out.println("一共吃了"+count+"个包子");
循环:
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);
有一个等式 12()34()56()78()9 = 59,括号中只能放加和减,如果要使等式成立,那么每个括号中应该放哪些符号。
有一个等式 12(a*)34(b*)56(c*)78(d*)9 = 59,括号中只能放加和减,如果要使等式成立,那么每个括号中应该放哪些符号。
/* 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);
}
}
}
}
}
计算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);
Math.round() //取整 double--->int
Math.round()方法会将浮点值四舍五入到最接近的long值。然后我们可以将其转换为int类型