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.mfbz.cn/a/883170.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

苹果macOS 15.0 Sequoia正式版发布:iPhone应用镜像玩、手机消息电脑知

9月17日苹果向 Mac 电脑用户推送了 macOS 15 更新&#xff08;内部版本号&#xff1a;24A335&#xff09;&#xff0c;除了引入数个 iOS 18 的新功能外&#xff0c;macOS 15 Sequoia 还带来了全新的 Continuity 功能 ——iPhone 镜像。 iPhone 镜像功能可以让用户直接在 Mac 上…

[Linux] Linux操作系统 进程的状态

标题&#xff1a;[Linux] Linux操作系统 进程的状态 个人主页&#xff1a;水墨不写bug &#xff08;图片来源于网络&#xff09; 目录 一、前置概念的理解 1.并行和并发 2.时间片 3.进程间具有独立性 4.等待的本质 正文开始&#xff1a; 在校的时候&#xff0c;你一定学过《…

图解Transformer就这30页PPT,你们真不看啊

图解Transformer就这30页PPT&#xff0c;你们真不看啊 主要介绍了Seq2Seq模型&#xff0c;慢慢引出了transformer的整体模型架构&#xff0c;比较具体的介绍了编码器部分的数据处理过程&#xff0c;包括了位置编码、多头注意力机制、残差连接、Layer Norm以及前馈网络等基本结…

支付宝沙箱环境 支付

一 什么是沙箱&#xff1a; 沙箱环境是支付宝开放平台为开发者提供的安全低门槛的测试环境 支付宝正式和沙箱环境的区别 &#xff1a; AI&#xff1a; 从沙箱到正式环境&#xff1a; 当应用程序开发完成后&#xff0c;需要将应用程序从沙箱环境迁移到正式环境。 这通常涉及…

如何查看线程

1、首先找到我们的电脑安装jdk的位置&#xff0c;这里给大家展示一下博主本人的电脑jdk路径下的jconsole位置。 2、 ok&#xff0c;那么找到这个jconsole程序我们直接双击打开就可以查看我们电脑的本地进程&#xff1a; jconsole 这里能够罗列出你系统上的 java 进程&#xff0…

古代经典名方目录数据库-支持经典名方检索!

"古代经典名方目录"是指一系列历史上流传下来的&#xff0c;被认为具有一定疗效的中药方剂的汇总。这些方剂多来源于历代医学典籍&#xff0c;经过长期临床实践的检验&#xff0c;部分已被收录于官方的目录之中&#xff0c;以便于现代医疗实践中的参考和应用。 目前…

手机在网状态查询接口如何用C#进行调用?

一、什么是手机在网状态查询接口&#xff1f; 手机在网状态查询接口是利用实时数据来对手机号码在运营商网络中的状态进行查询的工具&#xff0c;包括正常使用状态、停机状态、不在网状态、预销户状态等。 二、手机在网状态查询适用哪些场景&#xff1f; 例如&#xff1a;商…

设计模式-结构型-11-代理模式

文章目录 1. 基本介绍2. 静态代理2.1 基本介绍UML 类图 2.2 应用实例定义接口目标对象代理对象调用代理 2.3 静态代理优缺点 3. 动态代理3.1 基本介绍3.2 JDK 中生成代理对象的 API参数说明UML类图 3.3 应用实例定义接口目标对象代理工厂调用代理 4. Cglib 代理4.1 基本介绍4.2…

求一个数的因子数(c语言)

1.计算并输出给定整数n的所有因子&#xff08;不包括1与n自身&#xff09;之和。规定n的值不大于1000。&#xff08;因子是能整除n的数 即n%i0&#xff09; // 例如&#xff0c;在主函数中从键盘给n输入的值为856&#xff0c;则输出为: sum763。 2.第一步我们先输入n的数&…

Koa (下一代web框架) 【Node.js进阶】

koa (中文网) 是基于 Node.js 平台的下一代 web 开发框架&#xff0c;致力于成为应用和 API 开发领域中的一个更小、更富有表现力、更健壮的基石&#xff1b; 利用 async 函数 丢弃回调函数&#xff0c;并增强错误处理&#xff0c;koa 没有任何预置的中间件&#xff0c;可快速…

mysql安装教程(新手版)

本教程不需要手动设置配置文件&#xff0c;比较简单&#xff0c;适合新手&#xff0c;过程需联网。 1.找到mysql官网 mysql官网 一.mysql的安装 1.界面如下图&#xff0c;点击箭头所指。 2.选择mysql版本&#xff0c;系统&#xff0c;安装。 3.下载完成后双击打开&#xff0…

golang操作mysql利器-gorm

1、傻瓜示例 GORM通过将数据库表中的数据映射到面向对象的模型中&#xff0c;简化了数据库操作&#xff0c;使得开发者可以很方便的使用代码来操作数据库&#xff0c;而无需编写SQL语句。 目前有个mysql表&#xff1a;miniprogram_orders&#xff0c;其存储了所有用户对应的订…

Android SystemUI组件(07)锁屏KeyguardViewMediator分析

该系列文章总纲链接&#xff1a;专题分纲目录 Android SystemUI组件 本章关键点总结 & 说明&#xff1a; 说明&#xff1a;本章节持续迭代之前章节的思维导图&#xff0c;主要关注左侧上方锁屏分析部分即可。 为了更好理解本文的内容&#xff0c;优先说明下SystemUI中与Ke…

CoreDNS实现跨集群service解析实践

CoreDNS实现跨集群service解析实践 背景介绍使用条件实现方案 CoreDNS是一款使用Go语言实现的专为云原生应用而生的DNS服务器。本文介绍CoreDNS在特定实际场景下的一种进阶使用实践&#xff0c;也许能为其他也在使用CoreDNS做服务发现的同学提供一些启发和思考。 背景介绍 在…

luceda ipkiss教程 76:设计光栅耦合器

案例分享&#xff1a;设计光栅耦合器 全部代码如下&#xff1a; from si_fab import all as pdk from ipkiss3 import all as i3 import numpy as npclass grating_coupler(i3.PCell):"""SOI grating coupler."""_name_prefix "grating_c…

mysql 05 InnoDB数据页结构

01.数据页结构的快速浏览 02.记录在页中的存储 在页的7个组成部分中&#xff0c;我们自己存储的记录会按照我们指定的 行格式 存储到 User Records 部分。但是在一开始生成页的时候&#xff0c;其实并没有 User Records 这个部分&#xff0c;每当我们插入一条记录&#xff0c…

单词记忆的化境:用思想的流水去淹没坚硬的石块

其实&#xff0c;鹅卵石通常都是很硬的。但是河底的石子&#xff0c;几乎大多都成了鹅卵石&#xff0c;它们被流水淹没&#xff0c;日复一日、夜以继日的冲刷着&#xff0c;没有了棱角。 在单词的记忆过程中&#xff0c;我们有太多的人&#xff0c;都有着不堪回首的往事&#x…

面试系列-携程暑期实习一面

Java 基础 1、Java 中有哪些常见的数据结构&#xff1f; 图片来源于&#xff1a;JavaGuide Java集合框架图 Java 中常见的数据结构包含了 List、Set、Map、Queue&#xff0c;在回答的时候&#xff0c;只要把经常使用的数据结构给说出来即可&#xff0c;不需要全部记住 如下&…

爬虫逆向学习(九):记录一个集cookie、请求参数、请求体、响应文本加密的站点反爬

此分享只用于学习用途&#xff0c;不作商业用途&#xff0c;若有冒犯&#xff0c;请联系处理 反爬前置信息 站点&#xff1a;aHR0cHM6Ly96d2Z3LmNxLmdvdi5jbi9pY2l0eS9pY2l0eS9lbmdpbmVlcmluZy9uYXZpZ2F0aW9u 接口&#xff1a;/icity/api-v2/cq.app.icity.engineering.Engine…

江科大51单片机

文章目录 led灯led点亮led闪烁流水灯 独立按键按键点灯按键消抖按键实现二进制流水灯按键实现流水灯 数码管静态数码管显示动态数码管显示 矩阵键盘定时器/中断串口通信led点阵屏DS1302实时时钟蜂鸣器AT24C02DS18B20LCD1602直流电机驱动AD/DA红外遥控 led灯 创建项目&#xff…