Java之路--瓦解逻辑控制与方法使用已是瓮中捉鳖

嗨嗨大家!今天我们来学习逻辑运算和方法的使用~

目录

一 逻辑控制

1 分支结构

1.1 if语句

1.2 switch 语句

2 循环结构

2.1 while 循环

2.2 for 循环

2.3 do while 循环

2.4  break

2.5 continue

3. 输出输入

二、方法的使用

1 方法定义语法

2 实参和形参的关系(重要)

3 方法的重载

4 方法递归

5. 猜数字游戏


一 逻辑控制

1 分支结构

1.1 if语句

基本语法形式1:

if(布尔表达式){

//条件满足时执行代码

}

基本语法形式2 

if(布尔表达式){

//条件满足时执行代码

}else{ 

//条件都不满足时执行代码

}

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

int num = 10;
if (num % 2 == 0) {System.out.println("num 是偶数");
} else {System.out.println("num 是奇数");
}

基本语法形式3:多分支的情况:

if(布尔表达式){

//条件满足时执行代码

}else if(布尔表达式){

//条件满足时执行代码

}else{ 

//条件都不满足时执行代码

}

代码示例2: 判定一个数字是正数还是负数

int num = 10;
if (num > 0) {System.out.println("num 是正数");
} else if (num < 0) {System.out.println("num 是负数");
} else {System.out.println("num 是 0");
}

代码示例3: 判定某一年份是否是闰年:

int year = 2000;if (year % 100 == 0) {  // 判定世纪闰年if (year % 400 == 0) {System.out.println("是闰年");} else {System.out.println("不是闰年");}} else {// 普通闰年if (year % 4 == 0) {System.out.println("是闰年");} else {System.out.println("不是闰年");}
}

1.2 switch 语句

基本语法形式:

switch(整数|枚举|字符|字符串){

     case 内容1 : {

         //内容满足时执行语句;
         [break;]
    }

    case 内容2 : {

         //内容满足时执行语句;
         [break;]

    }
    ...

    default:{

         //内容都不满足时执行语句;
         [break;]

    }

}

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

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, 就会执行 default 中的语句.
  • switch 中值的不同,会执行对应的 case 语句,遇到 break 就会结束该 case 语句.
  • switch 不能表达复杂的条件 .
  • 每个case下面的代码要跟break,否则就会形成穿透现象,直到遇到下一个case或者default
  •  switch 中的值只能是 整数|枚举|字符|字符串 

我们来看以下的代码:

代码示例1:

// 例如: 如果 num 的值在 10 到 20 之间, 就打印 hehe
// 这样的代码使用 if 很容易表达, 但是使用 switch 就无法表示. 
if (num > 10 && num < 20) {System.out.println("hehe");
}

在示例1中,if 后面的条件表达式较为复杂,不能使用switch 。

代码示例2: 

double num = 1.0;
switch(num) {case 1.0:System.out.println("hehe");break;case 2.0:System.out.println("haha");break;
}
// 编译出错
Test.java:4: 错误: 不兼容的类型: 从double转换到int可能会有损失

 这里报错的原因是:定义num的类型是double,而上面的注意事项已经提过:switch 中的值只能是 整数|枚举|字符|字符串。

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

2 循环结构

2.1 while 循环

基本语法形式:

while(循环条件){

循环语句;

}

循环条件为 true, 则执行循环语句,然后再次判断条件反复执行,直到条件不成立为止。

用法:不知道循环次数时使用while循环

2.2 for 循环

基本语法形式:

for(表达式1;表达式2;表达式3){

循环体;

}

  • 表达式1: 用于初始化循环变量.
  • 表达式2: 循环条件
  • 表达式3: 更新循环变量

用法:知道循环次数时用for循环

2.3 do while 循环

先执行循环语句, 再判定循环条件

基本语法形式:

do{

 循环语句;

}while(循环条件);

用法:至少循环一次的时候用do while

2.4  break

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

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

int num = 100;
while (num <= 200) {if (num % 3 == 0) {System.out.println("找到了 3 的倍数, 为:" + num);break;}num++;
}// 执行结果
找到了 3 的倍数,为:102

2.5 continue

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

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

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

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

3. 输出输入

基本语法形式:

System.out.println(msg); // 输出一个字符串, 带换行 

System.out.print(msg); // 输出一个字符串, 不带换行 

System.out.printf(format, msg); // 格式化输出

  • println 输出的内容自带 \n, print 不带 \n
  • printf 的格式化输出方式和 C 语言的 printf 是基本一致的
代码示例
System.out.println("hello world");
int x = 20;
System.out.printf("x = %d\n", x)

格式化字符串 

转换符类型   举例              
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 读取字符串/整数/浮点数 

import java.util.Scanner; // 需要导入 util 包Scanner sc = new Scanner(System.in);
System.out.println("请输入你的姓名:");
String name = sc.nextLine();
System.out.println("请输入你的年龄:");
int age = sc.nextInt();
System.out.println("请输入你的工资:");
float salary = sc.nextFloat();
System.out.println("你的信息如下:");
System.out.println("姓名: "+name+"\n"+"年龄:"+age+"\n"+"工资:"+salary);
sc.close(); // 注意, 要记得调用关闭方法//使用 Scanner 循环读取 N 个数字 
Scanner sc = new Scanner(System.in);
double sum = 0.0;
int num = 0;
while (sc.hasNextDouble()) {
double tmp = sc.nextDouble();
sum += tmp;
num++;
}
System.out.println("avg = " + sum / num);
sc.close();// 执行结果
10
40.0
50.5
^d 
sum = 100.5
avg = 33.5 

 注意事项: 当循环输入多个数据的时候, idea使用 ctrl + d 来结束输入

二、方法的使用

方法就是一个代码片段. 类似于 C 语言中的 "函数

1 方法定义语法

方法定义:

public static 方法返回值 方法名称([参数类型 形参 ...]){

方法体代码;

[return 返回值];

}

方法调用:

返回值变量 = 方法名称(实参...);

例如:

pubilc static void menu( ){...}

  • public:访问权限
  • static:静态
  • void:返回值类型
  • menu:方法名(自定义)
  • ( ):参数列表
  • {...}:方法体

注意:

  1. 方法定义时的参数称为 "形参", 方法调用时的参数称为 "实参". 
  2. 方法的定义必须在类之中, 代码书写在调用位置的上方或者下方均可. 
  3. 方法定义时, 参数可以没有. 每个参数要指定类型.
  4. Java 中没有 "函数声明" 这样的概念 .

2 实参和形参的关系(重要)

代码示例: 交换两个整型变量

class Test {public static void main(String[] args) {int a = 10;int b = 20;swap(a, b);System.out.println("a = " + a + " b = " + b);}public static void swap(int x, int y) {int tmp = x;x = y;y = tmp;}}// 运行结果
a = 10 b = 20

原因分析

刚才的代码, 没有完成数据的交换.

对于基础类型来说, 形参相当于实参的拷贝. 即 传值调用 

int a = 10;
int b = 20;
int x = a;
int y = b;
int tmp = x;
x = y;
y = tmp;

可以看到,  x  y 的修改, 不影响 a  b. 

解决办法: 传引用类型参数 (例如数组来解决这个问题)

class Test {public static void main(String[] args) {int[] arr = {10, 20};swap(arr);System.out.println("a = " + arr[0] + " b = " + arr[1]);}public static void swap(int[] arr) {int tmp = arr[0];arr[0] = arr[1];arr[1] = tmp;}
}
// 运行结果
a = 20 b = 10

3 方法的重载

规则:

针对同一个类:

  • 方法名相同 
  • 方法的参数不同(参数个数或者参数类型) 
  • 方法的返回值类型不影响重载

代码示例:

public static int add(int x, int y) {return x + y;
}
public static double add(double x, double y) {return x + y;
}public static double add(double x, double y, double z) {return x + y + z;
}

方法的名字都叫 add. 但是有的 add 是计算 int 相加, 有的是 double 相加; 有的计算两个数字相加, 有的是计算三个数字相加.

注意:

当两个方法的名字相同, 参数也相同, 但是返回值不同的时候, 不构成重载.

4 方法递归

递归的程序的执行过程不太容易理解, 要想理解清楚递归, 必须先理解清楚 "方法的执行过程", 尤其是 "方法执行结束之后, 回到调用位置继续往下执行”

代码示例 

public static void main(String[] args) {int n = 5;int ret = factor(n);    System.out.println("ret = " + ret);
}
public static int factor(int n) {System.out.println("函数开始, n = " + n);if (n == 1) {System.out.println("函数结束, n = 1 ret = 1");return 1;}    int ret = n * factor(n - 1);System.out.println("函数结束, n = " + n + " ret = " + ret);   return ret;
}// 执行结果
函数开始, n = 5
函数开始, n = 4
函数开始, n = 3
函数开始, n = 2
函数开始, n = 1
函数结束, n = 1 ret = 1
函数结束, n = 2 ret = 2
函数结束, n = 3 ret = 6
函数结束, n = 4 ret = 24
函数结束, n = 5 ret = 120
ret = 120

执行过程图

 

下面我们来实现一个简单的游戏:

5. 猜数字游戏

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

参考代码

import java.util.Random;
import java.util.Scanner;public class Test {//猜数字游戏public static void main(String[] args) {Scanner sc=new Scanner(System.in);Random random=new Random();int randNum = random.nextInt(100);while(true){System.out.println("请输入你所猜的数字:");int num=sc.nextInt();if(num<randNum){System.out.println("猜小了");} else if (num>randNum) {System.out.println("猜大了");}else{System.out.println("恭喜你,猜对了!");break;}}}}

 相信看到这里的你收获满满吧?如果觉得本次分享对你有帮助,记得留下三连+支持哈~你们的互动是我创作的最大动力!最后的最后,与大家分享一句话:做难事必有所得,与君共勉!那我们下期再见啦~

 

 

 

 

 

 

 

 

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

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

相关文章

网络通信——DHCP

目录 一.DHCP应用场景 二.通信过程 三.DHCP报文 四.DHCP通信原理 &#xff08;1&#xff09;租借过程 &#xff08;2&#xff09;DHCP 租期更新 &#xff08;3&#xff09;DHCP重绑定 五.一般路由器的DHCP支持两种地址池 &#xff08;1&#xff09;接口地址池 &…

进制转换,原码反码补码

正数的三码合一 1个byte8位&#xff0c;-128符号位溢出了&#xff0c;所以是1000 0000

基于Python大数据的B站热门视频的数据分析及可视化系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

全连接神经网络

这里写目录标题 全连接神经网络vs前馈神经网络基于全连接神经网络的手写数字识别使用Pytorch实现纯Python实现 全连接神经网络的局限 端到端学习 深度学习有时也称为端到端机器学习&#xff08;end-to-end machine learning&#xff09;。这里所说的端到端是指从一端到另一端的…

David律所代理Jose Martin幽默水果版权首发维权,尚未TRO

案件基本情况&#xff1a;起诉时间&#xff1a;2024/9/18案件号&#xff1a;2024-cv-08484原告&#xff1a;Jose Martin原告律所&#xff1a;David起诉地&#xff1a;伊利诺伊州北部法院涉案商标/版权&#xff1a;原告品牌简介&#xff1a;西班牙的卓越艺术家Jose Martin以他非…

网络原理之IP协议(网络层)

目录 前言 什么是IP协议&#xff1f; IP协议的协议头格式 16位总长度&#xff08;字节数&#xff09; 16位标识、3位标志位和13位片偏移 8位生存时间 IP地址管理 1.动态分配IP 2.NAT机制&#xff08;网络地址转换&#xff09; NAT机制是如何工作的 NAT机制的优缺点…

Nginx反向代理配置支持websocket

一、官方文档 WebSocket proxying 为了将客户端和服务器之间的连接从HTTP/1.1转换为WebSocket&#xff0c;使用了HTTP/1.1中可用的协议切换机制&#xff08;RFC 2616: Hypertext Transfer Protocol – HTTP/1.1&#xff09;。 然而&#xff0c;这里有一个微妙之处:由于“升级”…

论文阅读:A Generalization of Transformer Networks to Graphs

论文阅读&#xff1a;A Generalization of Transformer Networks to Graphs 论文地址1 摘要2 贡献Graph TransformerOn Graph Sparsity&#xff08;图稀疏&#xff09;On Positional Encodings&#xff08;位置编码&#xff09;3 Graph Transformer Architecture&#xff08;架…

C++:日期类的实现

目录 一、前言 二、头文件 三、各个函数的实现 打印、检查日期及获取日期 、、-、-、 、<、<、>、>、 &#xff01; 日期-日期 >>、<< 一、前言 前面几篇讲了关于类和对象的一些知识&#xff0c;本篇就来实现一下前面用到的日期类。 二、头文…

市面第一款 C++ 版本的U盘装机软件(即将上线)

市面大部分U盘装机软件&#xff0c;都是采用Au3脚本开发&#xff0c;而且有各种捆绑&#xff0c;闲来无聊&#xff0c;采用Qt C制作一款CU盘装机软件&#xff0c;从此告别Au3脚本&#xff0c;各种炫酷界面随便换&#xff0c;敬请期待 另外两个界面暂时不公布&#xff0c;防止Au…

uni-app页面调用接口和路由(四)

文章目录 一、路由二、页面调用接口二、路由跳转1.uni.navigateTo(OBJECT)2.uni.redirectTo(OBJECT)3.uni.reLaunch(OBJECT)4.uni.switchTab(OBJECT)5.uni.navigateBack(OBJECT) 总结 一、路由 路由配置 uni-app页面路由为框架统一管理&#xff0c;开发者需要在pages.json里配…

Linux —— Socket编程(一)

一、本篇重点 1. 认识IP地址、端口号、网络字节序等网络编程中的基本概念 2. 学习Socket api的基本用法 3. 能够实现一个简单的udp客户端/服务器 二、基本概念 1. 理解源IP地址和目的IP地址 简单的理解&#xff0c;IP地址是用于标识一台机器的&#xff0c;我们通过IP地址去…

Springboot常见问题(bean找不到)

如图错误显示userMapper bean没有找到。 解决方案&#xff1a; mapper包位置有问题&#xff1a;因为SpringBoot默认的包扫描机制会扫描启动类所在的包同级文件和子包下的文件。注解问题&#xff1a; 比如没有加mapper注解 然而无论是UserMapper所在的包位置还是Mapper注解都是…

大数据Hologres(一):Hologres 简单介绍

文章目录 Hologres 简单介绍 一、什么是实时数仓 Hologres 二、产品优势 1、专注实时场景 2、亚秒级交互式分析 3、统一数据服务出口 4、开放生态 5、MaxCompute查询加速 6、计算存储分离架构 三、应用场景 搭建实时数仓 四、产品架构 1、Shared Disk/Storage &am…

ER 图 Entity-Relationship (ER) diagram 101 电子商城 数据库设计

起因&#xff0c; 目的: 客户需求, 就是要设计一个数据库。 过程&#xff0c; 关于工具: UI 设计&#xff0c;我最喜欢的工具其实是 Canva, 但是 Canva 没有合适的模板。我用的是 draw.io, 使用感受是&#xff0c;很垃圾。 各种快捷键不适应&#xff0c;箭头就是点不住&…

OpenCV4.8 开发实战系列专栏之 01- 环境搭建与图像读写

大家好&#xff0c;欢迎大家学习OpenCV4.8 开发实战专栏&#xff0c;长期更新&#xff0c;不断分享源码。 专栏代码全部基于C 与Python双语演示&#xff0c;专栏答疑群 请联系微信 OpenCVXueTang_Asst 本文关键知识点&#xff1a; 开发环境搭建、读取图像与显示图像,读取图像…

【笔记篇】一篇文章搞定Spring框架

文章目录 前言一、Spring框架的优势 二、 Spring的使用流程Spring的依赖注入bean后处理器容器后处理器FileSystemResource类Spring的AOP机制AOP基础知识AOP应用案例Spring的事务管理事务控制参数事务的隔离级别 总结 前言 学习完了Spring框架&#xff0c;总结回顾一下。 一、…

使用vite+react+ts+Ant Design开发后台管理项目(三)

前言 本文将引导开发者从零基础开始&#xff0c;运用vite、react、react-router、react-redux、Ant Design、less、tailwindcss、axios等前沿技术栈&#xff0c;构建一个高效、响应式的后台管理系统。通过详细的步骤和实践指导&#xff0c;文章旨在为开发者揭示如何利用这些技术…

工程师 - Windows下打开PowerShell和CMD Prompt的若干方法

打开PowerShell 在Windows中&#xff0c;你可以通过以下几种方式来打开PowerShell&#xff1a; 1. 开始菜单&#xff08;Start Menu&#xff09;&#xff1a;点击“开始”按钮&#xff0c;然后在搜索栏中输入“PowerShell”。在搜索结果中&#xff0c;选择“Windows PowerShell…

夹耳式蓝牙耳机哪个牌子最好?夹耳式耳机推荐性价比排行榜

耳夹式耳机既不堵耳孔、也不需要包覆耳廓&#xff0c;佩戴时看起来更像是一个“耳环”&#xff0c;固定方式也类似“夹耳朵”。不过&#xff0c;它并不是真的夹住了耳朵肉&#xff0c;而是半夹、半挂——依靠耳廓边缘厚、里面薄&#xff0c;且有一定的弯折面的特殊构造&#xf…