IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> java 程序逻辑控制+猜数字游戏+程序调试【详解】 -> 正文阅读

[Java知识库]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在哪个包底下怎么办?查帮助手册
image-20210808172405834

代码示例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");
    }

运行结果:image-20210808173652954

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);
    }

打印结果:image-20210808180721757

代码示例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);
    }

运行结果:image-20210808180950724

代码示例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);
    }

打印结果:image-20210808181151806

注意事项

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++; 
}
}

打印结果:image-20210808182034953

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++;
        }
    }

打印结果:image-20210808182903113

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);
    }

运行结果:image-20210808183553589

do while循环

基本语法

do{ 
循环语句; 
}while(循环条件);
//先执行循环语句, 再判定循环条件.

代码示例:

 public static void main(String[] args) {
        int i=0;
        do{
            System.out.println("至少执行一次:"+"hehe haha");
        }while(i!=0);
    }

打印结果:image-20210808184249022

注意:
do…while循环:至少会执行一次
do while 循环最后的分号不要忘记

输入输出

输出到控制台

基本语法

System.out.println(msg); // 输出一个字符串, 带换行
System.out.print(msg); // 输出一个字符串, 不带换行
System.out.printf(format, msg); // 格式化输出

代码示例:

 public static void main23(String[] args) {
        String msg="hello";
        String format="world";
        System.out.println(msg); // 输出一个字符串, 带换行
        int a=10;
        System.out.printf("a=%d\n",a);
        System.out.print(msg); // 输出一个字符串, 不带换行
        System.out.printf(format, msg); // 格式化输出
    }

打印结果:image-20210808185113252

格式化字符串

转换符类型举例
d十进制整数("%d", 100)100
x十六进制整数("%x", 100)64
o八进制整数("%o", 100)144
f定点浮点数("%f", 100f)100.000000
e指数浮点数("%e", 100f)1.000000e+02
g通用浮点数("%g", 100f)100.000
a十六进制浮点数("%a", 100)0x1.9p6
s字符串("%s", 100)100
c字符("%c", 1)1
b布尔值("%b", 1)true
h散列码("%h", 100)64
%百分号("%d.2f%%", 2/7f)0.29%

从键盘输入

读入一个字符 (选学)

public static void main24(String[] args)  {
        //《》
        System.out.println("输入一个字符:");
        char i= 0;//read报错:选到它,按住Alt+回车键,选中第二个,捕获异常
        //这种太复杂,不建议使用
        try {
            i =(char)System.in.read();
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("你输入的字符是:"+i);
    }

Scanner:输入工具类

public static void main25(String[] args) {
        Scanner scanner=new Scanner(System.in);
        String str2=scanner.nextLine();
        //这里的nextLine在读入的时候遇到空格不结束,但它需要放到最上面
        System.out.println(str2);
    
       byte b=scanner.nextByte();
       System.out.println(b);

        float f=scanner.nextFloat();
        System.out.println(f);

        String str1=scanner.next();//这里的next在读入的时候,遇到空格结束,
        System.out.println(str1);
    }

运行结果:image-20210808191238922

注意:如果输入与类型不匹配时会报错

image-20210808191828487

用Scanner循环读入n个数字不结束,想要结束使用ctrl+D

public static void main26(String[] args) {
        Scanner scanner=new Scanner(System.in);
       while(scanner.hasNextInt()){
           int a=scanner.nextInt();
           System.out.println(a);
       }
    }

运行结果:image-20210808190631460

猜数字游戏

游戏规则:
系统自动生成一个随机整数(1-100), 然后由用户输入一个猜测的数字. 如果输入的数字比该随机数小, 提示 “低 了”,
如果输入的数字比该随机数大, 提示 “高了” , 如果输入的数字和随机数相等, 则提示 “猜对了” .

public static void main28(String[] args) {
       Scanner scanner=new Scanner(System.in);
        //电脑随机生成数字
    Random random=new Random(22);
    int rand=random.nextInt(100)+1;//bound:100表示生成[0,100),需要+1生成1~100的数
                while(true) {
                    System.out.println("请输入数字:");
                    int num=scanner.nextInt();
                    if (num < rand) {
                        System.out.println("低了");
                    } else if (num > rand) {
                        System.out.println("高了");
                    } else {
                        System.out.println("等于");
                        break;
                    }
                }
                }
}

运行结果:image-20210808192303309

程序的调试

画图解说:image-20210808192650961

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-08-09 10:06:43  更:2021-08-09 10:07:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/10 20:25:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码