初始Java篇(JavaSE基础语法)(2)

news2024/11/23 9:01:33

个人主页(找往期文章包括但不限于本期文章中不懂的知识点):我要学编程(ಥ_ಥ)-CSDN博客

目录

逻辑控制

顺序结构

分支结构

if语句

switch 语句 

循环结构

while 循环

for 循环

do while 循环

输入输出

输出到控制台

从键盘输入

猜数字游戏


逻辑控制

Java同样和C语言一样是有三种结构:顺序结构,选择结构,循环结构。

顺序结构

顺序结构就是程序在执行时,按照一行一行代码的顺序执行下去。

分支结构

if语句

语法格式:

//语法格式1:
if(布尔表达式){
    // 语句
}

语法格式2:
if(布尔表达式){
    // 语句1
}else{
    // 语句2
}

语法格式3:
if(布尔表达式1){
    // 语句1
}else if(布尔表达式2){
    // 语句2
}else{
    // 语句3
}

如果布尔表达式结果为true,执行if中的语句,否则不执行。

好啦!大部分内容和C语言差不多,我们就直接上练习。

【练习】

1. 判断一个数字是奇数还是偶数。

public class Test {
    public static void main(String[]args){
        //从键盘上输入数据
        Scanner scanner = new Scanner(System.in);
        int i = scanner.nextInt();
        if(i % 2 == 1){
            System.out.println("是奇数");
        } else{
            System.out.println("是偶数");
        }
    }  
}

至于那个从键盘上输入数据,我们在后面学习输入数据时会学习。 

2. 判断一个数字是正数,负数,还是零。

public class Test {
    public static void main(String[]args){
        Scanner scanner = new Scanner(System.in);
        int i = scanner.nextInt();
        if(i > 0) {
            System.out.println("是正数");
        } else if (i < 0) {
            System.out.println("是负数");
        } else {
            System.out.println("是0");
        }
    }  
}

3. 判断一个年份是否为闰年

public class Test {
    public static void main(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("不是闰年");
        }
    }  
}

注意:这里的代码风格和C语言是不一样的。

下面是C语言的做法:

if (表达式)
{
    //语句1
}
else
{
    //语句2、
}

switch 语句 

基本语法:

switch(表达式){
    case 常量值1:{
        语句1;
        [break;]
    }
    case 常量值2:{
        语句2;
        [break;]
    }

    ...
    default:{
        //内容都不满足时执行语句;
        [break;]
    }
}

执行流程: 1. 先计算表达式的值 2. 和case依次比较,一旦有响应的匹配就执行该项下的语句,直到遇到break时结束 3. 当表达式的值没有与所列项匹配时,执行default语句。

练习:根据 day 的值输出星期几。

public class Test {
    public static void main(String[] args) {
        //根据 day 的值输出星期几
        Scanner scanner = new Scanner(System.in);
        int day = scanner.nextInt();
        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;
        }
    }
}

【注意事项】

1. 多个case后面的常量值不可以重复。

2. switch的括号内只能是以下类型的表达式: 基本类型:byte、char、short、int,注意不能是long类型 引用类型:String常量串、枚举类型。

3. switch 不能表达复杂的条件。当有复杂条件需要判断时,我们就需要用到if语句了。

4. switch 虽然支持嵌套, 但是很丑,一般不推荐。

综上, 我们发现, switch 的使用局限性是比较大的。

循环结构

while 循环

基本语法格式:

//循环条件的结果也要是布尔类型
while(循环条件){
    循环语句;
}

循环条件为 true, 则执行循环语句; 否则结束循环。

练习1:打印 1 - 10 的数字。

public class Test {
    public static void main(String[] args) {
        int n = 1;
        //注意这里的结果一定要是布尔类型
        while(n <= 10){
            System.out.print(n+" ");
            n++;
        }
    }
}

2. 计算 1 - 100 的和。

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

3. 计算 5 的阶乘 

public class Test {
    public static void main(String[] args) {
        int ret = 1;
        int n = 1;
        while(n <= 5){
            ret *= n;
            n++;
        }
        System.out.println(ret);
    }
}

4. 计算 1! + 2! + 3! + 4! + 5!

public class Test {
    public static void main(String[] args) {
        int sum = 0;
        int n = 1;
        int ret = 1;
        while(n <= 5){
            ret *= n;
            sum += ret;
            n++;
        }
        System.out.println(sum);
    }
}

注意事项 :

1. 和 if 类似, while 下面的语句可以不写 { } , 但是不写的时候只能支持一条语句. 建议还是加上 { }。 2. 和 if 类似, while 后面的 { 建议和 while 写在同一行。

3. 和 if 类似, while 后面不要多写 分号, 否则可能导致循环不能正确执行。

break

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

练习:找到 100 - 200 中第一个是 3 的倍数的数字。

public class Test {
    public static void main(String[] args) {
        int n = 100;
        while(n <= 200){
            if(n % 3 == 0){
                System.out.println(n);
                break;
            }
            n++;
        }
    }
}

当执行到break时,就会跳出循环。 

continue

continue 的功能是跳过本次循环剩下的部分, 进入下次循环。

练习:找到 100 - 200 中第一个是 3 的倍数的数字。

public class Test {
    public static void main(String[] args) {
        int n = 100;
        while(n <= 200){
            if(n % 3 != 0){
                n++;//这个不能少
                continue;
            }
            System.out.println(n);
            break;
        }
    }
}

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

for 循环

基本语法格式:

for(表达式1;布尔表达式2;表达式3){
    表达式4;
}

表达式1: 用于初始化循环变量初始值设置,在循环最开始时执行,且只执行一次。

表达式2: 循环条件,满足,则循环继续,否则循环结束。

表达式3: 循环变量更新方式。 

(和while循环类似) 1. 和 if 类似, for 下面的语句可以不写 { } , 但是不写的时候只能支持一条语句. 建议还是加上 { } 2. 和 if 类似, for 后面的 { 建议和 while 写在同一行. 3. 和 if 类似, for 后面不要多写 分号, 否则可能导致循环不能正确执行. 4. 和while循环一样,结束单趟循环用continue,结束整个循环用break。

do while 循环

基本语法格式:

do{
    循环语句;
}while(循环条件);//这里的分号不能少

do while循环的特点是不管条件满不满足,一上来就会执行循环语句。因此,我们在写一个游戏的时候,一般都会使用do while循环。

基本用法和while循环差不多。

输入输出

输出到控制台

基本语法:

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

System.out.println("输出切换行"); 
System.out.print("输出不换行"); 
System.out.printf("%s\n", "格式化输出"); 

println 输出的内容自带 \n, print 不带 \n。

printf 的格式化输出方式和 C 语言的 printf 是基本一致的。 

格式化字符串

转换符类型举例输出的结果
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", 100)true
h散列码("%h", 100)64
%百分号("%.2f%%", 2/7f)0.29%

这个表格没必要记住, 用到的时候根据需要查一下就行了,实在要记住,就记住一些常见的值。 

从键盘输入

使用 Scanner 读取字符串/整数/浮点数。

举例:

public class Test {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入你的名字:");
        String name = scanner.nextLine();
        System.out.print("请输入你的年龄:");
        int age =scanner.nextInt();
        System.out.println("你的信息如下:");
        System.out.println("名字"+name+"\n"+"年龄"+age);
    }
}

这个输入类似创建一个变量。可以把Scanner看成一个输入变量类型,后面的变量名可以随意取,不一定要是scanner,也可以是a,b……后面的new Scanner是一起的(固定的)。System.in的意思是从键盘输入。而后面的nextLine,nextInt是分别输入一个字符串和一个整形。与nextLine类似的还有一个next,这个是遇到空格就停止读入(即使你输入了:我 要 学 编程,它也只会读取“我”)。

还有一个点就是:当我们使用Scanner输入数据的时候,在程序的末尾要加上 sc.close(); 这个就类似我们在C语言里学习的文件操作一样,打开文件后,在程序结束时要加上一个fclose(),来关闭文件。当然不加上这句话也没有关系。

练习:使用 Scanner 循环读取 N 个数字,并求取其平均值。 

public class Test {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = 0;//记录读取了几个数据
        double avg = 0;
        int sum  = 0;
        //类似C语言里的while(scanf("%d", &n) != EOF)
        //当输入ctrl + D时,就会停止读取数据
        while(scanner.hasNextInt()){
            int j =  scanner.nextInt();
            sum += j;
            n++;
        }
        avg = sum*1.0 / n;
        System.out.println(avg);
    }
}

:当循环输入多个数据的时候, 使用 ctrl + z 来结束输入 (Windows 上使用 ctrl + Z, Linux / Mac 上使用 ctrl + D)这里指的是CMD上。我们用的不是CMD,而是IDEA,因此就是输入ctrl + D。

猜数字游戏(含源码)

我们之前在学习C语言的循环时,也写了一个猜数字的小游戏,现在我们就用Java来实现一下。

这里我们就简单了解一下规则:

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

逻辑实现具体可看下面这篇文章:利用C语言的分支循环少量的函数知识写一个猜数字的小游戏-CSDN博客

源码: 

public class Tset {
    public static void game() {
        Scanner scanner = new Scanner(System.in);
        Random random = new Random();//生成随机数的种子
        int num= random .nextInt(100)+1;生成1~100之间的随机数
        int i = 5;
        do{
            i--;
            System.out.print("请输入你要猜的数字:");
            int n = scanner.nextInt();
            if(n > num){
                System.out.print("猜大了,请重新猜!");
                System.out.println("你还剩"+i+"次机会!");
            } else if (n < num) {
                System.out.print("猜小了,请重新猜!");
                System.out.println("你还剩"+i+"次机会!");
            }else {
                System.out.println("恭喜你,猜对了");
                break;
            }
        }while(i != 0);

    }
    public static void menu() {
        System.out.println("***************************************");
        System.out.println("******         猜数字游戏          ******");
        System.out.println("******    1. play    0. exit     ******");
        System.out.println("***************************************");
    }
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int input = 0;
        do{
            menu();//打印菜单
            System.out.print("请选择你要进行的操作:");
            input = scanner.nextInt();
            switch(input){
                case 1:
                    System.out.println("游戏开始,请做好准备!");
                    game();
                    break;
                case 0:
                    System.out.println("游戏退出");
                    break;
                default:
                    System.out.println("选择错误,请重新选择");
                    break;
            }
        }while(input != 0);
    }
}

这里有一个关于生成随机数的工具:Random,这个是用来生成一个随机数的种子的(类似C语言里的srand函数)。如果我们在  Random random = new Random(); 这个语句的括号里随机输入一个值,那么它生成的随机数就是伪随机数了。例如:

public class Test {
    public static void main(String[] args) {
        Random random = new Random(123);//随便写的一个数
        int num = random.nextInt();//这个sum的值是一个定值
        System.out.println(num);
    }
}

int num= random .nextInt(100)+1;  这个语句的意思是生成一个1~100的随机数。括号里的100相当于%100的意思,也就是生成0~99的数字,我们再加上1,就变成1~100了。

至于  public static void game() 和  public  static void menu() 这个我们在下一篇博客再一起来学习。

好啦!本期JavaSE基础语法的学习到此就结束了!下一期,我们再一起学习吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1532004.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++ UML类图

参考文章&#xff1a; &#xff08;1&#xff09;C UML类图详解 &#xff08;2&#xff09;C基础——用C实例理解UML类图 &#xff08;3&#xff09;C设计模式——UML类图 &#xff08;4&#xff09;[UML] 类图介绍 —— 程序员&#xff08;灵魂画手&#xff09;必备画图技能之…

npm出现内部错误,重新设置镜像

问题&#xff1a; 报错解释&#xff1a; 这个错误表明你尝试从一个指定的npm镜像源的响应时失败了。可能的原因包括网络问题、镜像源不可用、DNS解析问题或者镜像源的确已经下线或更改。 1.重新设置镜像源 设置淘宝镜像源&#xff1a; npm config set registry https://re…

⾃定义类型:联合和枚举

1.联合体 1.1 联合体类型的声明 像结构体⼀样&#xff0c;联合体也是由⼀个或者多个成员构成&#xff0c;这些成员可以不同的类型。 但是编译器只为最⼤的成员分配⾜够的内存空间。联合体的特点是所有成员共⽤同⼀块内存空间。所以联合体也叫&#xff1a;共⽤体。 给联合体…

安装MySQL5.7.19 + 解决数据库乱码

文章目录 1.删除mysql服务 sc delete mysql2.解压到D:\mysql5.7下3.配置管理员环境变量4.D:\mysql5.7\mysql-5.7.19-winx64下创建my.ini1.创建文件2.文件内容 5.管理员打开cmd&#xff0c;切换到 D:\mysql5.7\mysql-5.7.19-winx64\bin6.输入 mysqld -install 安装mysql服务7.初…

腾讯云服务器怎么买省钱?先领券,再下单!

腾讯云代金券领取渠道有哪些&#xff1f;腾讯云官网可以领取、官方媒体账号可以领取代金券、完成任务可以领取代金券&#xff0c;大家也可以在腾讯云百科蹲守代金券&#xff0c;因为腾讯云代金券领取渠道比较分散&#xff0c;腾讯云百科txybk.com专注汇总优惠代金券领取页面&am…

2024年腾讯云服务器优惠券领取入口和代金券使用教程(收藏)

腾讯云代金券领取渠道有哪些&#xff1f;腾讯云官网可以领取、官方媒体账号可以领取代金券、完成任务可以领取代金券&#xff0c;大家也可以在腾讯云百科蹲守代金券&#xff0c;因为腾讯云代金券领取渠道比较分散&#xff0c;腾讯云百科txybk.com专注汇总优惠代金券领取页面&am…

C语言经典算法-6

文章目录 其他经典例题跳转链接31.数字拆解32.得分排行33.选择、插入、气泡排序34.Shell 排序法 - 改良的插入排序35.Shaker 排序法 - 改良的气泡排序 其他经典例题跳转链接 C语言经典算法-1 1.汉若塔 2. 费式数列 3. 巴斯卡三角形 4. 三色棋 5. 老鼠走迷官&#xff08;一&…

10分钟带你了解分布式系统的补偿机制

我们知道&#xff0c;应用系统在分布式的情况下&#xff0c;在通信时会有着一个显著的问题&#xff0c;即一个业务流程往往需要组合一组服务&#xff0c;且单单一次通信可能会经过 DNS 服务&#xff0c;网卡、交换机、路由器、负载均衡等设备&#xff0c;而这些服务于设备都不一…

浏览量这么低,还要不要继续坚持?

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 曾经在一个群里聊天&#xff0c;有群友看到我两位数的浏览量&#xff0c;说到&#xff1a;浏览量这么低还坚持什么&#xff1f; 浏览量低是事实&#xff0c;大多数是十几二十的&#xff0c;上百的都是少数&#xff0c…

Day62:WEB攻防-PHP反序列化CLI框架类PHPGGC生成器TPYiiLaravel等利用

目录 反序列化链项目-PHPGGC&NotSoSecure NotSoSecure(综合类) PHPGGC(单项类) 反序列化框架利用-ThinkPHP&Yii&Laravel [安洵杯 2019]iamthinking Thinkphp V6.0.X 反序列化 CTFSHOW 反序列化 267 Yii2反序列化 CTFSHOW 反序列化 271 Laravel反序列化 知识…

JVM学习-类加载

目录 1.类文件结构 2.类加载器 3.类加载的三个阶段 3.1加载 3.2链接 3.2.1验证 3.2.2准备阶段 3.2.3解析阶段 3.3初始化 4.拓展&#xff1a;反射 4.1获取类对象 4.2创建实例 4.3获取方法 4.4方法调用 1.类文件结构 2.类加载器 类加载器用来将类文件的二进制字节码加载到JV…

咨询交流论坛|基于JSP+ Mysql+Java+ B/S结构的东理咨询交流论坛设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java&#xff0c;ssm&#xff0c;springboot的平台设计与实现项目系统开发资源&#xff08;可…

DataFrame转换为Numpy数组

参考&#xff1a;Converting DataFrame to Numpy Array Numpy&#xff08;Numerical Python&#xff09;是一种开源的Python科学计算库&#xff0c;它提供了一个强大的多维数组对象和一系列的工具函数&#xff0c;用于处理这些数组。Pandas则是Python中另一个流行的数据处理库…

Python学习:注释和运算符

python 注释 在Python中&#xff0c;注释用于在代码中添加解释、说明或者提醒&#xff0c;但并不会被解释器执行。Python中的注释以#开头&#xff0c;直到行末为止。下面是关于Python注释的详细解释和举例&#xff1a; 单行注释&#xff1a;使用#符号在行的开头添加注释&…

闭式解,加权最小二乘法

二郎最近在看定位算法&#xff0c;里面大家提到的比较多的就是加权最小二乘法&#xff0c;而也会提到闭式解&#xff0c;所以二郎带大家一起了解一下这些方法&#xff0c;希望大家都能懂得这个方法&#xff0c;而不是一看到就发懵。 1、闭式解解析解 1&#xff09;闭式解等价于…

跟着cherno手搓游戏引擎【29】Batch简单合批

思路&#xff1a; CPU和GPU都开辟同样大小的一大块内存&#xff08;为了存储顶点信息&#xff09; 索引在程序运行时生成对应规则后绑定到索引缓冲中 动态生成顶点信息&#xff08;现在改成Drawquad只是确定图形顶点的位置&#xff09; 然后在Endscene&#xff0c;将CPU的动…

Linux:Prometheus的源码包安装及操作(2)

环境介绍 三台centos 7系统&#xff0c;运行内存都2G 1.prometheus监控服务器&#xff1a;192.168.6.1 主机名&#xff1a;pm 2.grafana展示服务器:192.168.6.2 主机名&#xff1a;gr 3.被监控服务器&#xff1a;192.168.6.3 …

产生三相任意相位差和任意相同占空比的PWM波形

整体思路 将整个PWM周期分为若干个小循环周期。划分的目的就是在任意小循环周期中&#xff0c;任何一相都不会发生0 --> 1 --> 0或1 --> 0 --> 1 电平变化超过两次的情况。 至少需要两个定时器&#xff0c;一个通用/高级定时器具有输出比较功能&#xff0c;另一…

力扣--最小覆盖子串--双端队列+滑动窗口

滑动窗口思路&#xff08;双端队列实现&#xff09;&#xff1a; 可以参考一下&#xff1a;力扣hot8---滑动窗口-CSDN博客以及力扣hot9---滑动窗口-CSDN博客。 使用滑动窗口有以下几个步骤&#xff1a;初始化双端队列&#xff08;将s的前t_len个元素入队&#xff0c;此时检验是…

竞赛 - 基于机器视觉的图像拼接算法

前言 图像拼接在实际的应用场景很广&#xff0c;比如无人机航拍&#xff0c;遥感图像等等&#xff0c;图像拼接是进一步做图像理解基础步骤&#xff0c;拼接效果的好坏直接影响接下来的工作&#xff0c;所以一个好的图像拼接算法非常重要。 再举一个身边的例子吧&#xff0c;…