java 程序逻辑控制+猜数字游戏+程序调试详解

Posted @陌上初薰

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 程序逻辑控制+猜数字游戏+程序调试详解相关的知识,希望对你有一定的参考价值。

【前言】:本篇主要以代码举例的形式来讲解顺序结构、分支结构、循环结构以及输入输出的方式,最后写了一个猜数字游戏,并用画图的方式简单说了一下idea的调试方式,旁观者清,如发现有错误,请及时评论或私信指正,欢迎来访!!!

顺序结构

按照代码书写的执行顺序一行一行的执行

如:

System.out.println("aaa");
System.out.println("bbb");
System.out.println("ccc");
// 运行结果
aaa
bbb
ccc

如果调整代码的书写顺序, 则执行顺序也发生变化

System.out.println("aaa");
System.out.println("ccc");
System.out.println("bbb");
// 运行结果
aaa
ccc
bbb

分支结构

if 语句

基本语法形式1:单分支

if(布尔表达式){
    //条件满足时执行代码
}

代码示例:

public static void main(String[] args) {
        int a = 10;
        if (a == 10) {
            System.out.println(a);
        }
}

基本语法形式2:双分支

if(布尔表达式){
    //条件满足时执行代码
}else{
    //条件不满足时执行代码
}

代码示例1:判断一个数是奇数还是偶数

 public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);//System.in:从键盘获取数据
        int a = scanner.nextInt();//输入一个整数
        System.out.println(a);//将你输入的整数输出
        if (a % 2 == 0) {
            System.out.println("a是偶数");
        } else {
            System.out.println("a是奇数");
        }
    }

1).Scanner scanner = new Scanner();输入一个整数的固定写法,使用Scanner需要导包(import java.util.Scanner),他这个包一般都会自动导入,这个包类似于C语言的include
2).scanner:是我们自己设置的变量
3)System.in:从键盘获取数据
4)不知道Scanner在哪个包底下怎么办?查帮助手册

代码示例2:判段某一年份是否是闰年

public static void main4(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int year = scanner.nextInt();//输入一个整数
        if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
            System.out.println("这一年是闰年");
        } else {
            System.out.println("这一年不是闰年");
        }
    }

闰年

普通闰年:公历年份是4的倍数的,且不是100的倍数(year % 4 == 0 && year % 100 != 0 ),为普通闰年(如2004年、2020年就是闰年)。

世纪闰年:公历年份是整百数的,必须是400的倍数(year % 400 == 0)才是世纪闰年(如1900年不是世纪闰年,2000年是世纪闰年)。

基本语法形式3:多分支

if(布尔表达式){
    //条件满足时执行代码
}else if(布尔表达式){
    //条件满足时执行代码
}else{
    //条件都不满足时执行代码
}

代码示例3:判断一个数字是正数还是负数

 public static void main3(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();//输入一个整数
        if (num > 0) {
            System.out.println("num为正数");
        } else if (num < 0) {
            System.out.println("num为负数");
        } else {
            System.out.println("num既不是正数也不是负数");
        }
    }

注意事项: 悬垂 else 问题

public static void main5(String[] args) {
        //if...else语句不加大括号只能写一条语句,建议加上大括号
        int x = 10;
        int y = 10;
        if (x == 10)
            if (y == 10)
                System.out.println("aaa");
        else
                System.out.println("ccc");
    }

运行结果:

1)结论:else只会和与它最接近的if匹配
2)为避免悬垂 else 问题出现:建议加上大括号,if…else语句不加大括号只能写一条语句。
3)注意:java代码风格是将左大括号与if/else 放在同一行

switch语句

基本语法

switch(整数|枚举|字符|字符串){
 case 内容1 : {
 内容满足时执行语句;
 [break;]
 }
 case 内容2 : {
 内容满足时执行语句;
 [break;]
 }
 ...
 default:{
 内容都不满足时执行语句;
 [break;]
 } 
}

代码示例:

 public static void main6(String[] args) {
        // int a=1;
        Scanner scanner = new Scanner(System.in);
        int a = scanner.nextInt();
        switch (a) {//a是switch的参数,类型是int
            case 1:
                System.out.println(1);
                break;
            case 2:
                System.out.println(2);
                break;
            default:
                System.out.println("输入有误");
                break;
        }
    }

代码示例4: 根据 day 的值输出星期

public static void main6(String[] args) {
int day = 1;
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("输入有误");
        break;       
}
}

代码分析:根据 switch 中值的不同, 会执行对应的 case 语句. 遇到 break 就会结束该 case 语句.

如果 switch 中的值没有匹配的 case, 就会执行 default 中的语句,建议一个 switch 语句最好都要带上 default.

注意事项

1)在Java语言当中不能做switch的参数的数据类型有哪些?
long、float、double、boolean
2)不写 break 的时候, case 语句会依次向下执行, 从而失去了多分支的效果.
3)switch中的值只能是整数、枚举、字符、字符串
switch 不能表达复杂的条件如:(num > 10 && num < 20)

循环结构

while循环

基本语法格式:

while(循环条件){ 
循环语句; 
}
循环条件为true,则执行循环语句,否则结束循环

代码示例5:打印1~9的数字

 public static void main(String[] args) {
        int num = 1;
        while (num != 10) {
            System.out.println(num);
            num++;
        }
    }

代码示例6:计算1~100的和

 public static void main10(String[] args) {
        int i = 1;
        int sum = 0;
        while (i <= 100) {
            sum += i;
            i++;
        }
        System.out.println(sum);
    }

代码示例7:计算1~100的奇数和,偶数和

public static void main11(String[] args) {
        int sumOdd = 0;//1~100奇数和
        int sumEve = 0;//1~100偶数和
        int i = 1;
        while (i <= 100) {
            sumOdd += i;
            i += 2;
        }
        System.out.println(sumOdd);
        i = 2;//改变i的初值
        while (i <= 100) {
            sumEve += i;
            i += 2;
        }
        System.out.println(sumEve);
    }

打印结果:

代码示例8:计算n的阶乘

 public static void main12(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();//输入一个整数
        int ret = 1;
        int i = 1;
        while (i <= n) {
            ret *= i;
            i++;
        }
        System.out.println(ret);
    }

运行结果:

代码示例9:求1!+2!+3!+4!+5!(1~n)的阶乘的和

public static void main13(String[] args) {
        Scanner scanner = new Scanner(System.in);//System.in:从键盘获取数值
        int n = scanner.nextInt();
        int sum = 0;
        int j = 1;
    // 外层循环负责求阶乘的和
        while (j <= n) {//循环是可以嵌套的
            int ret = 1;
            int i = 1;
             // 里层循环负责完成求阶乘的细节.
            while (i <= j) {
                ret *= i;
                i++;
            }
            sum = sum + ret;
            j++;
        }
        System.out.println(sum);
    }

打印结果:

注意事项

1).和 if 类似, while 下面的语句可以不写 { } , 但是不写的时候只能支持一条语句. 建议还是加上 { }
2).和 if 类似, while 后面的 { 建议和 while 写在同一行.
3).和 if 类似, while 后面不要多写 分号, 否则可能导致循环不能正确执行

break

break 的功能是让循环提前结束.

代码示例:

 public static void main(String[] args) {
        int i = 1;
        while (i <= 10) {
            if (i == 6) {
                break;//break结束所有循环
            }
            System.out.println(i);
            i++;
        }
    }

代码示例10: 找到 100 - 200 中第一个 3 的倍数

 public static void main(String[] args) {
int num = 100; 
while (num <= 200) { 
 if (num % 3 == 0) { 
 System.out.println("找到了 3 的倍数, 为:" + num); 
 break; 
 } 
 num++; 
}
}

打印结果:

continue

continue 的功能是跳过这次循环, 立即进入下次循环.

代码示例11: 找到 100 - 200 中所有3 的倍数

 public static void main(String[] args) {
int num = 100; 
while (num <= 200) { 
 if (num % 3 != 0) { 
 num++; // 这里的 ++ 不要忘记! 否则会死循环. 
 continue; 
 } 
 System.out.println("找到了 3 的倍数, 为:" + num); 
 num++; 
}
}

执行到 continue 语句的时候, 就会立刻进入下次循环(判定循环条件), 从而不会执行到下方的打印语句

代码示例12:找到 1~100之间既能被3整除又能被5整除的数字

//方法1: 
public static void main16(String[] args) {
        int i = 1;
        while (i <= 100) {
            if (i % 3 != 0 || i % 5 != 0) {
                i++;
                continue;
            }
            System.out.println(i);
            i++;
        }
    }
//方法2:使用最小公倍数
    public static void main17(String[] args) {
        int i = 1;
        while (i <= 100) {
            if (i % 15 != 0) {
                i++;
                continue;
            }
            System.out.println(i);
            i++;
        }
    }

打印结果:

for 循环

基本语法

for(表达式1;表达式2;表达式3){ //表达式2一定是一个布尔表达式
循环体; 
}

//表达式1: 用于初始化循环变量.

//表达式2: 循环条件

//表达式3: 更新循环变量.
//相比于 while 循环, for 循环将这三个部分合并在一起, 写代码时不容易遗漏.

代码示例13:打9印1到9的数字

  public static void main18(String[] args) {
        for(int i=1;i<=10;i++){
            System.out.println(i);
        }
    }

代码示例14:计算1-100的和

public static void main19(String[] args) {
        int i=0;
        int sum=0;
        for(i=1;i<=100;i++){
            sum+=i;
        }
        System.out.println(sum);
    }

代码示例15:计算1!+2!+3!+4!+5!

 public static void main21(String[] args) {
        int sum=0;
        int i=1;
        //第一个for循环是产生1到5的数字
        for(i=1;i<=5;i++){
            //第二个for循环是求一个数的阶乘
            int ret=1;
            for(int j=1;j<=i;j++){//
                ret*=j;
            }
            sum+=ret;//求和
        }
        System.out.println("result="+sum猜数字游戏

猜数字游戏

java小游戏-猜数字

用Java编程这个猜数字游戏

Java 初学 第一弹--编译并运行书上的简单程序(猜数字小游戏)

用C#编写猜数字游戏,