if
if(表达式1){
表达式2;
}
if 使用过程中可能遇到的坑
在第6行,if后面有一个分号; 而分号也是一个完整的表达式
如果b为true,会执行这个分号,然后打印yes
如果b为false,不会执行这个分号,然后打印yes
这样,看上去无论如何都会打印yes
public class HelloWorld {
public static void main(String[] args) {
boolean b = false;
if (b);
System.out.println("yes");
}
}
练习-BMI
基于前面的操作符练习-BMI,做基于判断的改进:
使用Scanner收集你的身高体重,并计算出你的BMI值是多少
BMI的计算公式是 体重(kg) / (身高*身高)
比如邱阳波的体重是72kg, 身高是1.69,那么这位同学的BMI就是
72 / (1.69*1.69) = ?
然后通过条件判断BMI的范围,打印出是超重还是正常
package caozuofu;
import java.util.Scanner;;
public class Bml
{
public static void main(String[] args)
{
// TODO Auto-generated method stub
Scanner h = new Scanner(System.in);
System.out.println("请输入身高(m):");
float height = h.nextFloat();
System.out.println("请输入体重(kg)");
float weight = h.nextFloat();
float bml = weight/(height*height);
System.out.println("当前的BMI是:"+bml);
if (bml<18.5)
{
System.out.println("身体状态是:体重过轻");
}
else if (bml<24)
{
System.out.println("身体状态是:正常范围");
}
else if (bml<27)
{
System.out.println("身体状态是:体重过重");
}
else if (bml<30)
{
System.out.println("身体状态是:轻度肥胖");
}
else if (bml<35)
{
System.out.println("身体状态是:中度肥胖");
}
else
{
System.out.println("身体状态是:中度肥胖");
}
}
}
练习-闰年
package kongzhiliucheng;
import java.util.Scanner;
public class Ruinian
{
public static void main(String[] args)
{
// TODO Auto-generated method stub
Scanner s = new Scanner(System.in);
System.out.println("请输入年份:");
int n = s.nextInt();
if (n%4==0 && n%100 != 0||n%400==0)
{
System.out.println(n+"是闰年");
}
else
{
System.out.println(n+"不是闰年");
}
}
}
switch
switch可以使用byte,short,int,char,String,enum
注: 每个表达式结束,都应该有一个break;
注: String在Java1.7之前是不支持的, Java从1.7开始支持switch用String的,编译后是把String转化为hash值,其实还是整数
注: enum是枚举类型,在枚举章节有详细讲解
public class HelloWorld {
public static void main(String[] args) {
//如果使用if else
int day = 5;
if (day==1)
System.out.println("星期一");
else if (day==2)
System.out.println("星期二");
else if (day==3)
System.out.println("星期三");
else if (day==4)
System.out.println("星期四");
else if (day==5)
System.out.println("星期五");
else if (day==6)
System.out.println("星期六");
else if (day==7)
System.out.println("星期天");
else
System.out.println("这个是什么鬼?");
//如果使用switch
switch(day){
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("这个是什么鬼?");
}
}
}
练习-季节
package kongzhiliucheng;
import java.util.Scanner;
public class Jijie
{
public static void main(String[] args)
{
// TODO Auto-generated method stub
Scanner month = new Scanner(System.in);
System.out.println("请输入月访:");
int n = month.nextInt();
switch (n) {
case 1:
case 2:
case 3:
{
System.out.println("春天");
break;
}
case 4:
case 5:
case 6:
{
System.out.println("夏天");
break;
}
case 7:
case 8:
case 9:
{
System.out.println("秋天");
break;
}
case 10:
case 11:
case 12:
{
System.out.println("冬天");
break;
}
default:
System.out.println("输入有误,重新输入");
}
}
}
while
条件为true时 重复执行
只要while中的表达式成立,就会不断地循环执行
public class HelloWorld {
public static void main(String[] args) {
//打印0到4
int i = 0;
while(i<5){
System.out.println(i);
i++;
}
}
}
条件为true时 重复执行,至少会执行一次
do{
} while 循环
与while的区别是,无论是否成立,先执行一次,再进行判断
public class HelloWorld {
public static void main(String[] args) {
//打印0到4
//与while的区别是,无论是否成立,先执行一次,再进行判断
int i = 0;
do{
System.out.println(i);
i++;
} while(i<5);
}
}
练习-阶乘
package kongzhiliucheng;
import java.util.Scanner;
public class Jiecheng
{
public static void main(String[] args)
{
// TODO Auto-generated method stub
Scanner jie = new Scanner(System.in);
System.out.println("请输入一个整数:");
int n = jie.nextInt();
int sum = 1;
while(n>0)
{
sum=sum*n;
n--;
}
System.out.println("阶乘是:"+sum);
}
}
for
for循环,和while一样,只是表达方式不一样
public class HelloWorld
{
public static void main(String[] args)
{
//使用while打印0到4
int i = 0;
while(i<5)
{
System.out.println("while循环输出的"+i);
i++;
}
//使用for打印0到4
for (int j = 0; j < 5; j++)
{
System.out.println("for 循环输出的"+j);
}
}
}
练习-乞丐
天朝有一个乞丐姓洪,去天桥要钱
第一天要了1块钱
第二天要了2块钱
第三天要了4块钱
第四天要了8块钱
以此类推
问题: 洪乞丐干10天,收入是多少?
package kongzhiliucheng;
import java.util.Scanner;
public class Qigai
{
public static void main(String[] args)
{
// TODO Auto-generated method stub
int sum =0;
for(int i=1;i<=10;i++)
{
sum += Math.pow(2,i-1);
}
System.out.println("乞丐一共收了:"+sum);
}
}
continue
继续下一次循环
如果是双数,后面的代码不执行,直接进行下一次循环
public class HelloWorld
{
public static void main(String[] args)
{
//打印单数
for (int j = 0; j < 10; j++)
{
if(0==j%2)
continue; //如果是双数,后面的代码不执行,直接进行下一次循环
System.out.println(j);
}
}
}
练习-忽略倍数
打印 1-100 之间的数,如果这个数,要么是3,要么5的倍数,就忽略掉
package kongzhiliucheng;
public class Huluebeishu
{
public static void main(String[] args)
{
// TODO Auto-generated method stub
for (int i = 1;i<=100;i++)
{
if (i%3==0|i%5==0)
{
continue;
}
System.out.println(i);
}
}
}
break
直接结束当前for循环
public class HelloWorld
{
public static void main(String[] args)
{
//打印单数
for (int j = 0; j < 10; j++)
{
if(0==j%2)
break; //如果是双数,直接结束循环
System.out.println(j);
}
}
}
练习-百万富翁
假设你月收入是3000,除开平时花销,每个月留下1000块钱进行投资。
然后你认真的钻研了 《股票和基金 21天从入门到精通》,达到了每年20%的投资回报率。
那么问题来了,以每个月投资1000块钱的节奏,持续投资多少年,总收入达到100万
(复利计算按照每年12000投入计算,不按照每月计息)
复利公式:
F = p* ( (1+r)^n );
F 最终收入
p 本金
r 年利率
n 存了多少年
假设情景一:
p = 10000
r = 0.05
n = 1
解读:
本金是10000
年利率是5%
存了一年 1次
复利收入 10000*( (1+0.05)^1 ) = 10500
假设情景二:
p = 10000
r = 0.05
解读:
本金是10000
年利率是5%
存了两年
复利收入 10000*( (1+0.05)^2 ) = 11025
package kongzhiliucheng;
public class Baiwangfugong
{
public static void main(String[] args)
{
// TODO Auto-generated method stub
double benjin =12000;
double nianlilv =0.2;
double sum=0;
int year;
for (year =1;year<100000;year++)
{
sum = (sum+benjin)*Math.pow(1.2, 1);
if (sum>1000000.0)
{
System.out.println(year);
break;
}
}
}
}
结束外部循环
break; 只能结束当前循环
public class HelloWorld {
public static void main(String[] args)
{
//打印单数
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
System.out.println(i+":"+j);
if(0==j%2)
break; //如果是双数,结束当前循环
}
}
}
使用boolean变量结束外部循环
借助boolean变量结束外部循环
需要在内部循环中修改这个变量值
每次内部循环结束后,都要在外部循环中判断,这个变量的值
public class HelloWorld
{
public static void main(String[] args)
{
boolean breakout = false; //是否终止外部循环的标记
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
System.out.println(i + ":" + j);
if (0 == j % 2)
{
breakout = true; //终止外部循环的标记设置为true
break;
}
}
if (breakout) //判断是否终止外部循环
break;
}
}
}
使用标签结束外部循环
在外部循环的前一行,加上标签
在break的时候使用该标签
即能达到结束外部循环的效果
public class HelloWorld
{
public static void main(String[] args)
{
//打印单数
outloop: //outloop这个标示是可以自定义的比如outloop1,ol2,out5
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
System.out.println(i+":"+j);
if(0==j%2)
break outloop; //如果是双数,结束外部循环
}
}
}
}
练习-黄金分割点
寻找某两个数相除,其结果 离黄金分割点 0.618最近
分母和分子不能同时为偶数
分母和分子 取值范围在[1-20]
package kongzhiliucheng;
public class Zonghelianxi
{
public static void main(String[] args)
{
// TODO Auto-generated method stub
//练习-黄金分割点
int a =0;
int b = 1;
double c = 1; //将c 看做 一个 现阶段最接近的值。 c-0.618的值表示 距离。 只要 sum 比c-0.618小,就表示, sum 更接近 0.618.
double sum = 0;
for(int i = 1 ; i <= 10; i++)
{
for(int j = 11; j <= 20 ; j++)
{
if((i % 2 == 0) && (j % 2 == 0))
{
continue;
}
sum = (double)i /j;
if(Math.abs(sum - 0.618) < Math.abs(c - 0.618))
{
c = sum;
a =i;
b = j;
}
}
}
System.out.println(a+"/"+b+"= " + c+"最接近0.618");
}
}
练习-水仙花数
package kongzhiliucheng;
public class Shuixianhua
{
public static void main(String[] args)
{
// TODO Auto-generated method stub
for(int a=1;a<10;a++)
{
for(int b=0;b<10;b++)
{
for(int c=0;c<10;c++)
{
double suma = Math.pow(a,3);
double sumb = Math.pow(b,3);
double sumc = Math.pow(c,3);
double BigSum;
BigSum=suma+sumb+sumc;
double sum=100*a+10*b+c;
if(BigSum==sum)
{
System.out.println(sum);
}
}
}
}
}
}
练习-小学算术题
package kongzhiliucheng;
public class Xiaoxueti
{
public static void main(String[] args)
{
// TODO Auto-generated method stub
for (int a = 0;a<14;a++)
{
for (int b = 0;b<14;b++)
{
for (int c = 0;c<14;c++)
{
for (int d = 0;d<14;d++)
{
if (a+b == 8 & a+c == 14 & b+d ==10 & c-d ==6)
System.out.println(a+","+b+","+c+","+d);
}
}
}
}
}
}