分支结构——if
基本结构:
if () {
}else if(){
}else if(){
}else{
}
例:猜数小游戏,生成1到6的随机整数,猜点小(1,2,3)还是点大(4,5,6)
import java.util.Scanner;
public class branch{
public static void main(String[] args){
/*猜数小游戏*/
System.out.println("买大买小,买定离手");
Scanner input = new Scanner(System.in);
String guess = input.nextLine();
int number = (int)(Math.random()*6+1);
if ((guess.equals("小") && number<=3)||(guess.equals("大") && number>3)){
System.out.println("bingo!");
}else{
System.out.println("gun");
}
}
}
分支结构——switch
基本结构:
switch(a){ //a可为byte,int,short,char等
case 值1: 代码1;break;//break非必须,只有想让代码执行完此步后跳出switch时使用
case 值2: 代码2;break;//break非必须
case 值3: 代码3;break;//break非必须
default: 代码;
}
例:输入百分制成绩,判定成绩区间(不及格,及格,良好,优秀,内卷,学神,错误的成绩)
import java.util.Scanner;
public class branch{
public static void main(String[] args){
/*switch判定成绩区间*/
System.out.println("请输入成绩");
Scanner input = new Scanner(System.in);
byte score = (byte)(input.nextInt());
switch(score/10){
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
System.out.println("很遗憾您不及格");
break; //如果此处没有break,执行完这步后会接着执行case6
case 6:
System.out.println("恭喜您及格了");
break;
case 7:
System.out.println("您成绩良好");
break;
case 8:
System.out.println("您真优秀");
break;
case 9:
System.out.println("太卷");
break;
case 10:
if (score==100){
System.out.println("神");
break;
}
default:
System.out.println("没这个成绩");
break; //可有可无的break
}
}
}
if语句优势是可以写复杂的逻辑,switch语句优势是执行效率高。
循环结构——for循环
基本结构:
for (int a=3; a<10; a+=2){
语句1;
语句2;
...
}
for 循环的逻辑执行流程为:
- 先执行初始化,例如上例的"int a=3;";
- 然后执行第一步循环:执行判断语句(如上例"a<10")—>执行循环体代码块—>执行循环变量变化语句(如上例"a+=2");
- 每一步循环都是一样的流程,直到最后一步执行循环变量变化的语句后,发现再下一步的判断语句为false,于是循环终止。
for循环变体:
int a=1;
for (; a<10; ){
语句1;
语句2;
...
a++;
}
- for循环要素一初始化语句可以写在循环体外,要素三循环变量变化语句可以写在循环体语句块里,要素二只能写在括号内,两个分号不能省;
- 原始的for循环执行完后,变量a的生命周期完结,再往下执行循环后的其他语句,变量a已经不存在了,需要重新声明和初始化才会有变量a;
- 但修改后不一样,因为修改后的变体,变量a的声明和初始化再循环体外执行,循环运行完后,变量a依然存在,且a值为循环执行最后一步的a值。
小试牛刀一:
public class forXun{
public static void main(String[] args){
int i = 0;
for(int i=0; i<5; ++i){ //此处报错
System.out.println(i);
}
}
}
上述代码编译报错:已在方法 main(String[])中定义了变量 i ,这说明for循环括号内的初始化语句声明的变量不可与for循环外且出现在for循环之前的变量同名。
小试牛刀二:
public class forXun{
public static void main(String[] args){
int i = 0;
for(i=3; i<5; ++i){
System.out.println(i);
}
}
}
上述代码会打印3和4。
小试牛刀三:
public class forXun{
public static void main(String[] args){
int i = 0;//为了能够查看循环最后一步得到的值,在这声明变量
for(i=1; i<30; i=++i+i++){
i=i++;
System.out.println(i);
}
System.out.println(i);
}
}
上述代码运行结果为:1、4、10、22、46。
小试牛刀四:
问题:a,b,c,d四个员工共生产370个零件,如果员工a多生成10个,员工b少生产20个,员工c生产数乘以2,员工d生产数除以2,则他们的数量相等,问四名员工各生产了多少件?
public class ProductNum{
public static void main(String[] args){
boolean flag = true;
for(int x=1;x<=370;x++){
if(x-10+x+20+x/2+x*2==370){
System.out.println("员工a生产了"+(x-10)+"件");
System.out.println("员工b生产了"+(x+20)+"件");
System.out.println("员工c生产了"+(x/2)+"件");
System.out.println("员工d生产了"+(x*2)+"件");
flag = false;
}
}
if (flag){
System.out.println("不存在这样的情况");
}
}
}
小试牛刀五:
问题:鸡和兔共50只,共有160只脚,问鸡兔各几只?
public class ProductNum{
public static void main(String[] args){
boolean flag = true;
for(int x=1; x<=50; x++){
if(x*2+(50-x)*4==160){
System.out.println("鸡"+x+"只");
System.out.println("兔"+(50-x)+"只");
flag = false;
}
switch(x){case 50:if(flag) System.out.println("无解");}
}
}
}
小试牛刀六:
问题:寻找四位数字的水仙花数(如1634=14+64+34+44)
public class ProductNum{
public static void main(String[] args){
for(int x=1000; x<10000; x++){
int ge = (int)Math.pow(x%10,4);
int shi = (int)Math.pow(x%100/10,4);
int bai = (int)Math.pow(x/100%10,4);
int qian = (int)Math.pow(x/1000,4);
if(ge+shi+bai+qian==x){
System.out.println(x);
}
}
}
}
上述代码输出结果为:1634、8208、9474。
循环结构——while循环
基本结构:
int i = 0; //初始化语句
while(i<5){ //比较语句
语句1;
语句2;
...
i++; //循环变量变化语句
}
小试牛刀七:
问题:瓜农卖西瓜,共1020个,每天卖掉总数的一半多两个,几天才能卖完所有的瓜?
public class ProductNum{
public static void main(String[] args){
int day = 0;
int sum = 1020;
while(sum>0){
day++;
sum -= 0.5*sum+2;
}
System.out.println("卖了"+day+"天才卖完");
}
}
小试牛刀九:
问题:画出下面的图形。
public class ProductNum{
public static void main(String[] args){
int x = 1;
int lineNum = 5;
while(x<=lineNum){
int y = 1;
int z = 1;
while(y<=lineNum-x){
System.out.print(" ");
y++;
}
while(z<=2*x-1){
z++;
System.out.print("*");
}
System.out.println(); //换行
x++;
}
}
}
循环结构——do…while循环
基本结构:
int i = 0; //初始化语句
do{ //比较语句
语句1;
语句2;
...
i++; //循环变量变化语句
}