java---程序结构(上)

2023-10-17 09:09:58 浏览数 (1)

4.1 结构的分类

1、顺序结构,程序从main方法开始从上到下,依次执行所有的语句。

2、选择结构(分支结构),程序从main方法开始从上到下这时有了选择的条件,让程序根据条件进行选择走哪条路,意思就是有的代码会执行,有的代码呢不会执行

3、循环结构, 程序从main方法开始从上到下这时有了循环的结构,让程序代码,在循环结构一直重复性的执行某一件事情,一直到条件判断结束

4.2 选择构造
if结构
代码语言:javascript复制
语法:
说明:条件就是关系或逻辑表达式
if(条件){
	要执行的代码
}

执行流程: 进入if进行条件判断,如果条件为真,执行if后面大括号中的内容,执行完成后跳出if结构执行后面的操作,如果条件为假,直接执行后面的操作,不进入if结构

如下所示:

代码语言:javascript复制
public class Demo8 {

    public static void main(String[] args) {

        //从键盘输入一个星期数,如果输入的是6就代表是星期6,这时我就去钓鱼

        Scanner input = new Scanner(System.in);

        System.out.println("请输入一个星期数");

        int week=input.nextInt();

        if(week==6){

            System.out.println("去钓鱼");

        }

        System.out.println("程序结束");

    }

}
问题:字符串的判断呢?

错误的判断方式:

代码语言:javascript复制
public class Demo8 {

    public static void main(String[] args) {

        //从键盘输入一个星期数,如果输入的是6就代表是星期6,这时我就去钓鱼

        Scanner input = new Scanner(System.in);

        System.out.println("请输入一个星期数");

        String week=input.next();

        if(week=="星期六"){//判断是错误的,==不能用与字符串的判断

            System.out.println("去钓鱼");

        }

        System.out.println("程序结束");

    }

}

正确的判断方式:

public class Demo8 {

    public static void main(String[] args) {

        //从键盘输入一个星期数,如果输入的是6就代表是星期6,这时我就去钓鱼

        Scanner input = new Scanner(System.in);

        System.out.println("请输入一个星期数");

        String week=input.next();

        if("星期六".equals(week)){

            System.out.println("去钓鱼");

        }

        System.out.println("程序结束");

    }

}

main中定义的变量都叫局部变量,局变量都会在栈中开辟一块空间,这个空间如果是基本数据类型就直接存值,如果是引用 数据类型就存堆的地址。

所以,字符串要用equals()方法来进行等值判断,==作的是内存地址判断

注意equals的使用一般都两个字符串之间进行等值判断,要求常量型数据写在前面,变量型数据写在后面, 例如 "星期六".equals(week) 如果week为null 时程序不报错. null 空 没有 一般用于定义引用型变量时不知道给什么值的时候,等待程序运行过程中给定值。

新的问题:

代码语言:javascript复制
public class Demo9 {

    public static void main(String[] args) {

        String str1="礼拜六";

        String str2="礼拜六";  //为同一对象,同一对象就是同一地址

        if(str1==str2){  //这又能判断正确

            System.out.println("去钓鱼");
        }
        System.out.println("程序结束");
    }
}
打印结果:
去钓鱼
程序结束
if...else结构
代码语言:javascript复制
语法:
if(条件){
	//条件正确时执行的代码
}else{
	//条件错误时执行的代码
}

执行流程,根据if里的条件进行判断,条件为真时执行if后面括号中的代码,如果条件为假,执行else后面括号里的代码

代码语言:javascript复制
public class Demo10 {

    public static void main(String[] args) {

        //查看这次张鹏的考试成绩,如果及格今晚张鹏就不上晚自习,如果不及格,今晚加班到十二点

        Scanner input =new Scanner(System.in);

        System.out.println("请输入张鹏的成绩:");

        double score=input.nextDouble();

        if(score>=60){

            System.out.println("今晚不上晚自习");

        }else{

            System.out.println("今天加班到十二点");

        }

        System.out.println("程序结束");

    }

}
代码语言:javascript复制
public class Demo11 {

    public static void main(String[] args) {

        //查看这次张鹏的考试成绩,如果及格今晚张鹏就不上晚自习,如果不及格,今晚加班到十二点

        //正确的成绩是0-100分  才参与判断,不然直接打印 "输入的数据错误"

        //键盘输入这就是第一步,必须这样写

        Scanner input =new Scanner(System.in);

        //键盘输入前,给出提示  System.out.println 打印语句

        System.out.println("请输入张鹏的成绩:");


        //input.nextDouble()从键盘输入小数并存放到变量中score

        double score=input.nextDouble();

        //score>=0 && score<=100  数据区间的判断

        if(score>=0 && score<=100){

            if(score>=60){

                System.out.println("不上晚自习");

            }else{

                System.out.println("今晚加班到十二点");

            }

        }else{

            System.out.println("输入的数据错误");

        }

    }

}
代码语言:javascript复制
public class Demo12 {

    public static void main(String[] args) {

        //查看这次张鹏的考试成绩,如果及格今晚张鹏就不上晚自习,如果不及格,今晚加班到十二点

        //正确的成绩是0-100分  才参与判断,不然直接打印 "输入的数据错误", 如果在输入数据的时候人家故意输入字符串而不是小数,需要进行拦截

        Scanner input = new Scanner(System.in);

        System.out.println("请输入张鹏的成绩:");

        /*

        	输入一个数据进来,先进行判断当前输入的数据是不是判断的类型,如果是结果true,如果不是结果是false

        */

        if(input.hasNextDouble()){  

            System.out.println("输入的是小数");

            /*

            这里会将上面hasNextDouble()输入的值直接存入到变量中,不再进行二次输入

            */

            double score = input.nextDouble();  
            if(score>=0 && score<=100){

                if(score>=60){

                    System.out.println("不上晚自习");

                }else{

                    System.out.println("今晚加班到十二点");

                }

            }else{

                System.out.println("输入的数据错误");

            }

        }else{

            System.out.println("输入的不是小数");

        }


    }

}


if结构可以写任何代码,可以嵌套任意层if

如果判断输入的类型是不是整型 input.hasNextInt()来判断
if...else if....else if..........else....... 多重if
代码语言:javascript复制
语法:
if(条件1){
		//代码块1
}else if(条件2){
	//代码2
}else if(条件3){
	//代码块3
}....
else if(条件n){
	//代码块n
}else{
	//代码块else
}[else 可选]

判断条件1,条件为真,执行代码块1,否则判断条件2,条件2为真,执行代码块2,否则继续判断下面的条件,如果所有的条件都不满足时执行else中的操作

代码语言:javascript复制
import java.util.Scanner;


public class Demo13 {

    public static void main(String[] args) {

        //输入张鹏的语文成绩,90-100 A  80-89 B  70-79 C  60-69 D 60以下 E 没有在这区间内的数据判定数据错误

        Scanner input = new Scanner(System.in);

        System.out.println("请输入张鹏的语文成绩:");

        if(input.hasNextInt()) {

            int score = input.nextInt();


            if(score>=90 && score<=100){

                System.out.println("A");

            }else if(score>=80 && score<=89){

                System.out.println("B");

            }else if(score>=70&& score<=79){

                System.out.println("C");

            }else if(score>=60&&score<=69){

                System.out.println("D");

            }else if(score>=0 && score<=59){

                System.out.println("E");

            }else {

                System.out.println("不是有效范围的数据");

            }


        }else{

            System.out.println("输入的数据不是整数");

        }


    }

}

上下条件具有一定的关联性例子:

代码语言:javascript复制
public class Demo14 {


    public static void main(String[] args) {

        //输入张鹏的语文成绩,90-100 A  80-89 B  70-79 C  60-69 D 60以下 E 没有在这区间内的数据判定数据错误

        Scanner input = new Scanner(System.in);

        System.out.println("请输入张鹏的语文成绩:");

        if(input.hasNextInt()) {

            int score = input.nextInt();

            if(score<0 || score>100){

                System.out.println("不是有效范围的数据");

            }else if(score>=90){

                System.out.println("B");

            }else if(score>=80){

                System.out.println("A");

            }else if(score>=70){

                System.out.println("C");

            }else if(score>=60){

                System.out.println("D");

            }else if(score>=0){

                System.out.println("E");

            }


        }else{

            System.out.println("输入的数据不是整数");

        }

    }

}

第一,这里的区间判断不需要后面的条件,因为上一个条件已经帮下一个条件限定了区间范围

第二、每一个条件必须按照排定的顺序编写,不能随意差位,不然会影响结果的执行

switch结构
代码语言:javascript复制
switch(整数变量|字符变量|字符串变量){
		case 常量值1:
				//代码块1
				break;
		case 常量值2:
					//代码块2
				break;
		case 常量值3:
				//代码块3
				break;
		....
		default:
			//上面所有的case都没有相等的值时,执行
			break;
}

switch是通过case 后指定的常量值与switch括号中的变量进行等值对比,能对比上(也就是相等)就进入到对应的case项中执行这个case项与最近一个break;之间的代码,如果一个case项缺少break;那么代码的执行,执行完了当前case项中的代码后,会串入下一个case项进行执行。 break;就是跳出switch结构的代码,遇见break,switch就结束。

代码语言:javascript复制
import java.util.Scanner;


public class Main6 {

 public static void main(String[] args) {

     //switch可以替换多重if中等值判断的情况

     Scanner input = new Scanner(System.in);

     System.out.println("请输入第一个数:");

     int week=input.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;

     }

 }

}

switch只能用于等值判断,多重if中等值判断的情况可以用switch替换,但是switch只能判断byte ,short,long,int,char,String类型的数据

代码语言:javascript复制
问题:输入一个月份,输出这个月有多少天?默认二月只有28
import java.util.Scanner;


public class Main8 {

 public static void main(String[] args) {

     Scanner input = new Scanner(System.in);

     System.out.println("请输入一个月份:");

     int month=input.nextInt();

     switch (month){

         case 1:

         case 3:

         case 5:

         case 7:

         case 8:

         case 10:

         case 12:

             System.out.println(31);

             break;

         case 2:

             System.out.println(28);

             break;

         case 4:

         case 6:

         case 9:

         case 11:

             System.out.println(30);

             break;

         default:

             System.out.println("输入错误");

             break;

     }

 }

}

如果要加上平年润年的判断 平年2月是28天,润年2月是29天

判断润年的条件是 year%4==0&&year0!=0||year@0==0

代码语言:javascript复制
import java.util.Scanner;


public class Main8 {

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);

        System.out.println("请输入一个年份:");

        int year=input.nextInt();

        System.out.println("请输入一个月份:");

        int month=input.nextInt();

        switch (month){

            case 1:

            case 3:

            case 5:

            case 7:

            case 8:

            case 10:

            case 12:

                System.out.println(31);

                break;

            case 2:

                if(year%4==0&&year0!=0||year@0==0){

                    System.out.println(29);

                }else {

                    System.out.println(28);

                }

                break;

            case 4:

            case 6:

            case 9:

            case 11:

                System.out.println(30);

                break;

            default:

                System.out.println("输入错误");

                break;

        }

    }

}

太累了兄弟们,一个小时弄的,祈求大家给个赞!谢谢

0 人点赞