从上往下,依次执行。
示例:
class ShunXuJieGouDemo {
public static void main(String[] args) {
System.out.println("程序开始了");
System.out.println("Hellow Java");
System.out.println("程序结束了");
}
}
程序运行结果:
格式一:
if(比较表达式) {
语句体;
}
执行流程:先计算比较表达式的值,看其返回值是true还是false。如果是true,就执行语句体;如果是false,就不执行语句体。
示例1:
class IfDemo{
public static void main(String [] args){
int x = 10;
if(x == 10){
System.out.println("x的值为10");
}
System.out.println("Over");
}
}
运行结果:
注意事项;
1、比较表达式无论简单还是复杂,结果必须是boolean类型
2、if语句控制的语句体如果是一条语句,大括号可以省略;如果是多条语句,就不能省略。建议永远不要省略。
3、一般来说:有左大括号就没有分号,有分号就没有左大括号
执行流程:首先计算比较表达式的值,看其返回值是true还是false。如果是true,就执行语句体1;
如果是false,就执行语句体2;
示例:判断键盘所输入的一个整数是奇数还是偶数
import java.util.Scanner;//导包
class IfTest{
public static void main(String [] args){
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
//输入想要判断的整数
System.out.println("输入想要判断的整数:");
int x = sc.nextInt();
//判断是奇数还是偶数
int y = x%2;
if(y == 0){
System.out.println("所输入的数是偶数");
}
else{
System.out.println("所输入的数是奇数");
}
}
}
运行结果:
class IfDemo2{
public static void main(String [] args){
int x = 10;
int y ;
if(x > 10){
y = 100;
}
else{
y = 200;
}
System.out.println("y="+y);
}
}
运行结果:
用三目运算符实现:
class IfDemo2{
public static void main(String [] args){
int x = 10;
int y = x > 10? 100:200;
System.out.println("y="+y);
}
}
运行结果:
结论:当if else运算后,有一个具体的结果时,可以简化写成三元运算符。
格式三:
if(比较表达式1) {
语句体1;
}
else if(比较表达式2) {
语句体2;
}
else if(比较表达式3) {
语句体3;
}
...
else {
语句体n+1;
}
示例:用键盘录入一个成绩,判断并输出成绩的等级。
90-100 优秀
80-90 好
70-80 良
60-70 及格
0-60 不及格
import java.util.Scanner;
class IfDemo3{
public static void main(String [] args){
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
//录入数据
System.out.println("请输入你的成绩:");
int score = sc.nextInt();
if(score > 90 && score <= 100){
System.out.println("优秀");
}
else if(score > 80 && score <= 90){
System.out.println("好");
}
else if(score > 70 && score <= 80){
System.out.println("良");
}
else if(score >= 60 && score <= 70){
System.out.println("及格");
}
else if(score >= 0 && score < 60){
System.out.println("不及格");
}
else{
System.out.println("您输入的成绩有误");
}
}
}
运行结果:
格式:
switch(表达式) {
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
...
default:
语句体n+1;
break;
}
注意:switch语句的表达式的取值时是有限定的,可取的值为:byte,short,int,char,JDK5以后可以是枚举,JDK7以后可以是字符串。
示例1:键盘录入一个数据,根据这个数据,我们输出对应的星期几
键盘录入1,对应输出星期一
键盘录入2,对应输出星期二
...
键盘录入7,对应输出星期日
import java.util.Scanner;
class SwitchDemo{
public static void main(String [] args){
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
//键盘控制录入数据
System.out.println("请输入一个数据(1-7)");
int week = sc.nextInt();
switch(week){
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("输入的数据有误");
break;
}
}
}
运行结果:
注意事项:1、case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的。
2、default可以省略,但是不建议,因为它的作用是对不正确的情况给出提示。
3、break可以省略,但是结果可能不是我们想要的。会出现一个现象:case穿透。
4、进入switch语句后,执行顺序是先执行case,然后从上到下,最后再执行default。即使default放在case上面,执行顺序也不变。
5、结束switch语句的两种情况:①遇到break,②执行到switch语句结束。
示例2:看程序写结果
class SwitchTest {
public static void main(String[] args) {
int x = 2;
int y = 3;
switch(x){
default:
y++;
break;
case 3:
y++;
case 4:
y++;
}
System.out.println("y="+y);
System.out.println("---------------");
int a = 2;
int b = 3;
switch(a){
default:
b++;
case 3:
b++;
case 4:
b++;
}
System.out.println("b="+b);
}
}
分析:第一个switch语句执行时,执行到default语句后,后面有break,所以就退出switch语句,执行输出语句。
第二个switch语句执行时,执行到default语句后,因为没有break,所以继续执行后面的两个case语句而不用判断是否满足条件。
运行结果:
import java.util.Scanner;
class SwitchTest4{
public static void main(String [] args){
//创建一个键盘录入对象
Scanner sc = new Scanner(System.in);
//输入数据
System.out.println("请输入月份(1-12)");
int month = sc.nextInt();
switch(month){
case 1:
case 2:
case 12:
System.out.println("冬季");
break;
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;
default:
System.out.println("你输入的月份有误");
}
}
}
程序运行结果:
思考:if和switch语句什么时候用比较合适:
if语句使用前提:1、针对结果是boolean类型的判断
2、针对一个范围的判断
3、针对几个常量值的判断
switch语句使用前提:针对几个常量值的判断
针对几个常量值的判断,建议使用switch语句,因为switch语句会将具体的答案都加载进内存,效率相对高。
格式:
for(初始化语句;判断条件语句;控制条件语句) {
循环体语句;
}
for里面的三个表达式运行的顺序,初始化表达式只读一次,判断循环条件,为真就执行循环体,然后再执行循环后的操作表达式,接着继续判断循环条件,重复整个过程,直到条件不满足为止。
示例一:使用for循环在控制台输入3句“hellow world”
class ForDemo{
public static void main(String [] args){
for(int i = 1;i <= 3;i++ ){
System.out.println("hellow world");
}
}
}
运行结果:
练习1:求出1-10之间数据之和
class ForDemo3{
public static void main(String [] args){
int sum = 0;
for(int i = 1;i <= 10;i++){
//int sum = 0;
sum = sum + i;
}
System.out.println("sum:"+sum);
}
}
运行结果:
练习2:求出1-100之间偶数和
class ForDemo4{
public static void main(String [] args){
int sum = 0;
for(int i = 1;i <= 100;i++){
if(i%2 == 0){
sum += i;
}
}
System.out.println("sum:"+sum);
}
}
运行结果:
练习3:在控制台输出所有的”水仙花数”(所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身)。
class ForDemo6{
public static void main(String [] args){
int count = 0;
for(int i = 100;i <= 999;i++){
int x = i%10;//求出个位数
int y = i/10%10;//求出十位数
int z = i/100%10;//求出百位数
if(i == (x*x*x+y*y*y+z*z*z)){
System.out.println(i);
count++;
}
}
System.out.println("所有的水仙花数的个数是:"+count);
}
}
运行结果:
格式:
初始化语句;
while(判断条件语句) {
循环体语句;
控制条件语句;
}
示例1:
class WhileDemo3{
public static void main(String [] args){
//while循环
int count2 = 0;
int i = 100;
while(i <= 999){
int ge = i%10;
int shi = i/10%10;
int bai = i/100%10;
if(i == (ge*ge*ge + shi*shi*shi + bai*bai*bai)){
count2++;
}
i++;
}
System.out.println(count2);
}
}
运行结果:
练习:我国最高山峰是珠穆朗玛峰:8848m,我现在有一张足够大的纸张,厚度为:0.01m。
请问,我折叠多少次,就可以保证厚度不低于珠穆朗玛峰的高度?
class WhileDemo5{
public static void main(String [] args){
//定义一个统计变量,初始化值为0;
int count = 0;
//最高山峰是珠穆朗玛峰:8848m这是最终的厚度
//我现在有一张足够大的纸张,厚度为:0.01m这是初始厚度
double start = 0.01;
double end = 8848.00;
while(start < end){
//只要每次变化的厚度没有超过珠穆朗玛峰的高度,就折叠,统计变量++
count++;
//没折叠一次厚度就会变为原来的2倍
start *= 2;
}
System.out.println("要折叠"+count+"次");
}
}
运行结果:
思考:while循环和for循环的区别?
1、for为了循环而定义的变量在for循环结束就在内存中释放,而while循环使用的变量在循环结束后还可以继续使用。
2、for循环适合针对一个范围判断进行操作,while循环适合判断次数不明确操作
格式:
初始化语句;
do {
循环体语句;
控制条件语句;
}
while(判断条件语句);
示例:
class DoWhileDemo{
public static void main(String [] args){
int i = 1;
do{
System.out.println("i="+i);
i++;
}
while(i <= 3);
}
}
运行结果:
循环语句的区别:
do...while循环至少执行一次循环体,而for,while循环必须先判断条件是否成立,然后决定是否执行循环体语句。
注意死循环:
两种最简单的死循环:while(true){...}、for(;;){...}
示例1:请输出下面的4行5列的星星(*)图案。
*****
*****
*****
*****
代码如下:
class ForForDemo{
public static void main(String [] args){
for(int x = 1;x <= 4;x++){
for(int y = 1;y <= 5;y++){
System.out.print("* ");
}
System.out.println();
}
}
}
运行结果:
示例2:请输出下列的形状
*
**
***
****
*****
代码如下:
class ForForDemo2{
public static void main(String [] args){
for(int x = 1;x <= 5;x++){
for(int y = 1;y <= x;y++){
System.out.print("*");
}
System.out.println();
}
}
}
运行结果:
示例3:在控制台输出九九乘法表。
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
...
1x9=9 2x9=18 ... ... 9x9=81
代码如下:
class ForForDemo3{
public static void main (String [] args){
for(int i = 1;i <= 9;i++){
for(int j = 1;j <= i;j++){
System.out.print(j+"x"+i+"="+i*j+'\t');
}
System.out.println();
}
}
}
运行结果:
注意:代码中的"\t"是一个转义字符,也就是制表符。还有其他的一些转义字符:\n:回车,\b:退格,\r:回车符
应用范围:
1)、switch语句中
2)、循环语句中
示例:
class BreakDemo{
public static void main(String [] args){
for(int x = 0;x < 10;x++){
if(x==3){
break;
}
System.out.println("x="+x);
}
}
}
运行结果:
当x的值为3的时候,跳出循环
应用范围:循环结构。
continue语句是结束本次循环继续下次循环。
示例:
class Continue{
public static void main(String [] args){
for(int x = 0;x <= 10;x++){
if(x==3){
continue;
}
System.out.println("x="+x);
}
}
}
运行结果:
当x的值为3时,跳出本次循环,执行下次循环。
注意:这两个语句离开应用范围,存在是没有意义的。
扩展知识:标号的出现,可以使得这两个语句作用于指定范围。
示例1:
class BreakDemo2{
public static void main(String [] args){
out:for(int x = 0;x <= 3;x++){
in:for(int y = 0;y <=4;y++){
if(y==2){
break;
}
System.out.println("x="+x+",y="+y);
}
}
}
}
运行结果:
class ContinueDemo2{
public static void main(String [] args){
out:for(int x = 0;x <= 3;x++){
in:for(int y = 0;y <= 4;y++){
if(y==2){
continue;
}
System.out.println("x="+x+",y="+y);
}
}
}
}
练习:小芳的妈妈每天给她2.5元钱,她都会存起来,但是, 每当这一天是存钱的第5天或者5的倍数的话,她都会花去6元钱,请问,经过多少天,小芳才可以存到100元钱。
分析:小芳的妈妈每天给她2.5元钱 double dayMoney = 2.5;
她都会存起来 double moneySum = 0;
因为是统计的题,所以必须有一个统计变量,在这里是用于统计天数的 int dayCount = 0;
当这一天是存钱的第5天或者5的倍数的话,她都会花去6元钱 dayCount%5==0时,moneySum -= 6;
经过多少天,可以存到100元 double result = 100;
方法一:使用while循环
class WhileDemo{
public static void main(String [] args){
double dayMoney = 2.5;
double moneySum = 0;
double result = 100;
int dayCount= 0;
while(moneySum < result){
dayCount++;
moneySum += dayMoney;
if(dayCount%5==0){
moneySum -= 6;
}
}
System.out.println(dayCount);
}
}
运行结果:
class WhileBreakDemo{
public static void main(String [] args){
double dayMoney = 2.5;
double moneySum = 0;
int dayCount = 0;
int result = 100;
while(true){
dayCount++;
moneySum += dayMoney;
if(moneySum >= result){
break;
}
if(dayCount%5 == 0){
moneySum -= 6;
}
}
System.out.println("一共用了"+dayCount+"天存了100元");
}
}
运行结果: