【爪洼岛冒险记】第4站:Java中如何进行控制台输入输出?用Java实现猜数字小游戏;超详细讲解Java中的方法:方法的重载,方法的签名

news2025/1/11 18:45:29

在这里插入图片描述

🌱博主简介:是瑶瑶子啦,一名大一计科生,目前在努力学习JavaSE。热爱写博客~正在努力成为一个厉害的开发程序媛!
📜所属专栏:爪洼岛冒险记【从小白到大佬之路】
✈往期博文回顾:链接: 【爪洼岛冒险记】第3站:任务1:学会int和String之间的转换;任务2:将Java运算符全部收入囊中~ 任务3:拿下Java中的类型提升
🕵️‍♂️近期目标:成为千粉小博主。
🙇‍♀️写博客理念:力求用自己的语言加上自己的理解去阐述知识知识、技术。喜欢画图、思维导图去描述过程和知识之间的联系。
🎡您的点赞、关注、收藏、评论,是对我最大的激励和支持!!!
🌺:“再牛的程序员也是从小白开始,既然开始了,就全身心投入去学习技术”

爪洼岛冒险记-第4站

  • 🌻上一站快速回顾:
  • 任务1:流程控制语句,你需要注意的:
  • 任务2:学会Java中的输入&输出
    • 2.1:三种输出方式
    • 2.2:从键盘输入:
      • 2.2.1:如何从键盘中读入一个基本数据类型数据?
      • 2.2.2:如何从键盘输入一个字符串?
      • 2.2.3:如何进行多组输入&输出?
  • 任务3:实现猜数字小游戏
    • 3.1:Java中如何生成随机数?
    • 3.2:获取随机数:
    • 3.3:总结:
    • 3.4:代码实现:
  • 任务4:学会Java中的方法
    • 4.1什么是Java中的方法?
    • 4.2Java中方法的定义方式:
    • 4.3方法使用的注意事项:
    • 4.4函数是如何开辟内存的?
    • 🌟4.5方法的重载(overload):
      • 4.5.1什么是重载:
      • 4.5.2什么是方法的签名(method signature)
      • 4.5.3重载的规则:

🌻上一站快速回顾:

在这里插入图片描述

🤹‍♀️上一站中,我们重点讲解了Java中的运算符,类型提升.,这里我们向自己提几个问题,快速回顾一下:

  • Java的除法运算符需要注意的是?
  • Java中取模运算(a%b),结果的正负取决于?
  • Java中哪个运算符进行了强制类型转换?

话不多说,咱们赶紧迎接Java岛上的无穷知识把!

在这里插入图片描述
🌴本站任务:
🙆‍♀️write int the front:
🥫🎊

  • 不可忽视的流程控制小细节!
  • Java中如何进行控制台的输入&输出?
  • 用Java写个小游戏!–猜数字小游戏
  • 什么是方法?(method)

任务1:流程控制语句,你需要注意的:

  • Java中”表达式“的值为布尔类型(和C不一样,C中表达式的值是数字类型)
    eg:这里while的判断部分不能直接写while( c ),因为c不是boolean类型,(在C语言中,这是是可以的。)
//求两个整数的最大公约数
    public static void main(String[] args) {
        int a=24;
        int b=18;
        int c=a%b;
        while(c!=0){//不能写成:while (c)
            a=b;
            b=c;
            c=a%b;
        }
        System.out.println("最大公约数是:"+b);
    }
  • do-while循环的while后面不要忘带分号!
do{
	expr1;
	...
}while();
  • else总是和它前面最近的那个没有匹配的if进行匹配

  • switch-case语句,switch()括号中的内容:
    1:不能为复杂表达式
    2:不能为long,float,double,boolean类型.

  • break只能跳出一层循环–离break最近的那层循环

  • goto是Java中的保留字(起用了最好不要使用,不然跳来跳去的,不易阅读和调试)

任务2:学会Java中的输入&输出

2.1:三种输出方式

System.out.println("输出且换行");
System.out.print("输出不换行");
System.out.printf("%format",arg);//(基本不用)//格式化输出,相当于C中的printf

2.2:从键盘输入:

  • 🍃前提:导入Java.util.Scanner包
import java.util.Scanner;

1,可以先理解为这个叫做Scanner的”包裹“(其实就是一个类文件)里面,有我们下面要用到的东西。
2,🌟对于Java中的点” . "理解为“ 的 ”;

2.2.1:如何从键盘中读入一个基本数据类型数据?

  • eg:读入一个int类型数据
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt;//从键盘读入1个int类型数据,并用变量n来接受
System.out.println(n);
  • 相应的,修改nextInt就可以读取其他类型数据:
    在这里插入图片描述

2.2.2:如何从键盘输入一个字符串?

Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine();
System.out.println(str);

在这里插入图片描述

  • 💁‍♀️为什么不建议用next()?
    因为遇到空格,则读取结束。
public class TestDemo {
    public static void main(String[] args) {
        Scanner scaner = new Scanner(System.in);
        String str = scaner.next();
        System.out.println(str);
    }
}

在这里插入图片描述

  • 🤦‍♀️注意事项:
    尽量不要在输入其他数据类型之后,再输入字符串。(但是OJ做题的话无所谓),因为字符串会读取输入上一个数据在输入缓冲区遗留下来的\n.

2.2.3:如何进行多组输入&输出?

  • eg:多组输入int类型数据:
public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNextInt()) {
            int a = scanner.nextInt();
            System.out.println(a);
        }
    }
  • 👩‍🏫相应的,将hasNextInt和nextInt做出相应的改变,即可多组读取其他类型数据:
    在这里插入图片描述

任务3:实现猜数字小游戏

3.1:Java中如何生成随机数?

  • 使用java.util包中的Random类:
import java.util.Random
  • 创建一个随机数"生成器"(2种方式:):

JavaAPI文档中是这么描述的:“该类的实例用来生成随机数的流”

//方式1:单纯创建一个随机数生成器
Random random = new Random();
//方式2:创建随机数生成器,并且设定随机数种子(seed)
Random random = new Random(88);
//88为随机数种子。

3.2:获取随机数:

eg:获取[0,100)的随机数

int rand = random.nextInt(100);

eg:获取[50,100)的随机数:

int rand = random.nextInt(50)+50;

1.如何理解“随机数的流”?
👩‍🏫其实就是一个随机数序列!
在这里插入图片描述
2.如何理解“随机数种子”-seed?
🙆‍♀️“种瓜得瓜,种豆得豆”,有什么样的种子,就有什么样的序列。一旦这个种子确定了,那么这个随机数流里面的每一个数字都是确定的!

3.3:总结:

  • 利用Random()生成随机数,每一次生成的随机数流(随机数序列)都是不同。
  • 利用Random(long seed)生成随机数,seed确定,每一次生成的随机数流都相同。

3.4:代码实现:

public static void main(String[] args) {
        //生成随机数
        Random random=new Random();
        int rand= random.nextInt(100);//[0,100)
        
        Scanner scanner=new Scanner(System.in);
        while(true){
            System.out.println("请入你想要猜的数字:");
            int num=scanner.nextInt();
            if(num==rand){
                System.out.println("恭喜你,猜对了");
                break;
            }
            else if(num>rand){
                System.out.println("猜大了");
            }
            else{
                System.out.println("猜小了");
            }
        }

任务4:学会Java中的方法

4.1什么是Java中的方法?

💁‍♀️方法,其实就是功能,再简单来说,就是一块可以被重复利用的代码块!相当于C语言中的函数。

  • 方法存在的意义:
    1:模块化组织代码
    2:提高代码的复用性,简洁性(调用现有method开发,不必重复造轮子)
    3:提高代码的可阅读性

4.2Java中方法的定义方式:

修饰限定符   返回值类型 函数名(参数列表){
	功能实现
}
//eg:
public static int add (int x,int y){
	return x+y;
}

4.3方法使用的注意事项:

  • 传参时,实参和形参的类型一定要匹配.
  • Java中没有所谓先声明,后定义(定义就是声明)。即,被调用方法也可在调用方法之后存在。
  • 方法的定义必须在类之中

4.4函数是如何开辟内存的?

  • 什么是栈.
  • 这里的栈,指的是是计算机内存中的一块存储区域–栈区.
  • 栈的特点?:–先进后出
    • 正是这种先进后出的方式,和函数调用的过程完全一致:主函数调用被调函数,只有当被调函数执行完(遇到return语句)–即这个函数出栈,才能继续执行主函数。
      在这里插入图片描述
  • 🔥注意!!!:在Java当中取不到栈上所存变量的地址,也就是说,想通过取栈上变量地址,来进行地址传参从而修改局部变量的值,是做不到的。

🌟4.5方法的重载(overload):

4.5.1什么是重载:

oracle官网上,JDK8标准手册手册是这样说的:If two methods of a class (whether both declared in the same class, or both inherited by a class, or one declared and one inherited) have the same name but signatures that are not override-equivalent, then the method name is said to be overloaded.
如果两个方法(无论这个两个方法是在同一个类中声明,或者这两个方法都被一个子类继承,或者一个方法在父类中声明,另外一个方法在子类中声明)具有同一个名字,但是签名不是重写等价的(一样的),那么这个方法的名字可以说

👩‍🏫因为还没有讲到类和对象,可以简单理解为:

  • 同"一个方法"(方法名相同的,我们抽象起来认为是一个方法),但是有不同版本的实现,这就叫做方法的重载or重写。(方法名只有1个,但方法有多个,具体的每一个方法都是不同的)

🤷‍♀️如何理解:
这里的”方法相同“,在语言上体现,就是函数名相同,比如,计算2个小数的和,这是加法;计算2个长整型的和,也是加法。那么我们只需要写一个方法add,然后通过去改变返回值(只改变返回值,不是重写)和参数列表还有具体实现方法实现的代码,来重载这个方法,即让看似好像在用add这1个方法,实际上它有不同的版本(add的重写)–比如:既可以做整数相加,又可做小数相加。
(但是调用方法时,编译器不是根据函数名来调用函数的,而是根据函数签名!这个我们稍后讲)
🤽‍♀️具体例子:

 //计算2个int类型数据相加
    public static int add(int a,int b){
        return a+b;
    }
    //计算2个double类型数据相加
    public static double add(double a,double b){
        return a+b;
    }
    //计算3个int类型数据相加
    public static int add(int a,int b,int c){
        return a+b+c;
    }
    public static void main(String[] args) {
        System.out.println(add(1,2,3));
    }

🔔注意:一些博文里说“重载是同一个类中的…"这种方法是错误的,也可以在两个不同类中!

class Point {
    int x = 0, y = 0;
    void move(int dx, int dy) { x += dx; y += dy; }
    int color;
}
class RealPoint extends Point {
    float x = 0.0f, y = 0.0f;
    void move(int dx, int dy) { move((float)dx, (float)dy); }
    void move(float dx, float dy) { x += dx; y += dy; }
}

“Here, the class RealPoint hides the declarations of the int instance variables x and y of class Point with its own float instance variables x and y, and overrides the method move of class Point with its own move method. It also overloads the name move with another method with a different signature”
简而言之就是说RealPoint类继承了Point类(并重写了Point类中move方法),RealPoint类中的的move方法就是重载的Point类中的move方法,而这两个方法可以看到并不在一个类中。所以:方法之间的重载,可以发生在两个类中(只要两个类是继承关系即可)

4.5.2什么是方法的签名(method signature)

  • 首先,编译器是根据方法的签名,来判断方法是否相同。即方法签名是用来区分不同方法的标识符.它包括两部分:(不包括修饰符和返回值!!!)
    1:方法名
    2:参数列表
  • 当我们调用一个方法时,如果已存在多个同名方法,Java会根据所传参数的类型,和个数(即参数列表),去自动匹配到方法签名符合的那个方法去调用。

4.5.3重载的规则:

  • 方法名相同
  • 方法的参数列表不同(参数个数&参数类型)
  • 方法返回值的类型是否相同,并不影响函数的重载

这两个方法的签名是一样的,所以不是函数的重载!

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

🏄‍♀️下期预告–超详细讲解Java中的数组
🙆‍♀️专栏系列文章:

  • 【爪洼岛冒险记】第3站:任务1:学会int和String之间的转换;任务2:将Java运算符全部收入囊中~ 任务3:拿下Java中的类型提升
  • 【爪洼岛冒险记】第2站:带你学会:Java中三种输出语句,java中基本数据类型,学会变量,常量,类型转换知识点
  • 【爪洼岛冒险记】第1站:Java重要特性,JDK,JRE,JVM区别和联系,环境变量

🙈原创不易,如果对你有所帮助,还请三连+关注!我是瑶瑶子,持续输出优质文章!
在这里插入图片描述

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

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

相关文章

【文件指针+文件顺序读写操作函数】

1.文件的打开和关闭 1.1 什么是文件指针 2.文件操作函数 2.1 fgetc函数和fputc函数2.2 fgets函数和fputs函数2.3 fscanf函数和fprintf函数2.4 fwrite函数和fread函数 1.文件的打开和关闭 1.1 什么是文件指针? 每个被使用的文件都在内存中开辟了一个相应的文件…

文件操作详解

文章目录前言一、什么是文件?1.程序文件2.数据文件3.文件名二、文件的打开和关闭1.文件指针2.文件的打开和关闭3.打开模式汇总4.例子三.操作函数介绍1.基本函数2.fseek2.ftell3.rewind4.feof尾话前言 恐怕很多人学完了c语言甚至不知道文件操作,也确实&am…

FPGA学习笔记-知识点3-Verilog语法1

1.关键字 2.运算符 按其功能可分为以下几类: 1) 算术运算符(,&#xff0d;,&#xff0c;/,&#xff05;) 2) 赋值运算符(,<) 3) 关系运算符(>,<,>,<) 4) 逻辑运算符(&&,||,!) 5) 条件运算符( ? &#xff1a;) 6) 位运算符(,|,^,&,^) …

【微信小程序】动态设置导航栏标题

&#x1f3c6;今日学习目标&#xff1a;第十八期——动态设置导航栏标题 &#x1f603;创作者&#xff1a;颜颜yan_ ✨个人主页&#xff1a;颜颜yan_的个人主页 ⏰预计时间&#xff1a;25分钟 &#x1f389;专栏系列&#xff1a;我的第一个微信小程序 文章目录前言使用配置文件…

消息中间件简介

UNIX的进程间通信就开始运用消息队列技术&#xff0c;一个进程将数据写入某个特定的队列中&#xff0c;其它进程可以读取队列中的数据&#xff0c;从而实现异步通信。对于如今的分布式系统&#xff0c;消息队列已经演变为独立的消息中间件产品&#xff0c;相比于RPC同步通信的方…

设计模式_行为型模式 -《模板方法模式》

设计模式_行为型模式 -《模板方法模式》 笔记整理自 黑马程序员Java设计模式详解&#xff0c; 23种Java设计模式&#xff08;图解框架源码分析实战&#xff09; 行为型模式用于描述程序在运行时复杂的流程控制&#xff0c;即描述多个类或对象之间怎样相互协作共同完成单个对象都…

测试开发 | AppCrawler 自动遍历测试实践(三):动手实操与常见问题汇总

上两篇文章介绍了自动遍历的测试需求、工具选择和 AppCrawler 的环境安装、启动及配置文件字段基本含义&#xff0c;这里将以实际案例更加细致的说明配置文件的用法和一些特殊场景的处理。 实操演示 常规使用 下面我们继续之前的例子&#xff0c;在雪球搜索框输入搜索内容后的页…

代码随想录算法训练营第六天 | 哈希表理论基础,242.有效的字母异位词,349. 两个数组的交集, 202. 快乐数,1. 两数之和

第五天 周日 休息~【提醒补坑&#xff1a;链表总结还没写】一、参考资料哈希表理论基础文章连接&#xff1a;https://programmercarl.com/%E5%93%88%E5%B8%8C%E8%A1%A8%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html有效的字母异位词题目链接/文章讲解/视频讲解&#xff1a;https:…

使用批处理__更改ip

1、使用.bat进行处理 echo off rem 测试更改ip netsh int ip set address "以太网 2" static 10.10.2.1 255.255.255.0 10.10.2.254 1 pause&exit 备注其他 echo #设静态IP netsh interface ip set address name"本地连接" sourcestatic addr192.16…

大坝安全监测解决方案 水库大坝安全监测系统改造工程方案

平升电子大坝安全监测系统根据SL551-2012《土石坝安全监测技术规范》的整编要求&#xff0c;设置了变形监测、渗流监测、环境量监测。借助大坝安全监测系统可及时了解大坝的工作性态和水库可能存在的事故隐患&#xff0c;为大坝安全管理与水库运行调度提供了准确、及时的现场信…

ElasticSearch7.10配置Search-Guard之配置用户

ElasticSearch7.10配置Search-Guard之配置用户 配置sg_internal_user.yml 密码是&#xff1a;elastic jode:hash: $2y$12$nUzkcjdnufzvI1HlmN7xSuND3skGhmwV5le5IINejz.asMFpLYNRybackend_roles:- "hr_department"psmith:hash: $2y$12$nUzkcjdnufzvI1HlmN7xSuND3sk…

[标准库]STM32F103R8T6 标准库配置RCC时钟和超频

前言 这篇博客总结一下学习到的配置时钟的方法。 从启动文件来看&#xff0c;MCU复位之后&#xff0c;执行到SystemInit()这个函数之后&#xff0c;会进入系统初始化设置&#xff0c;比如根据当前的MCU型号进入不同的条件编译语句&#xff0c;再配置相应的寄存器初始值&#…

mysql之一条mysql语句时如何执行的

请把连接器的功能说明一下? 连接器负责建立客户端和mysql服务器之间的连接.当客户端在中断输入连接命令(mysql -h -u -p),传输层使用tcp协议,通过三次握手建立连接. 如果mysql服务服务没有启动,会报错: 如果mysql服务正常启动,完成三次握手,在传输层建立连接后,会进行密码验证…

【云原生】k8s 一键部署(ansible)

文章目录一、概述二、Ansible 部署1&#xff09;开启记录日志2&#xff09;去掉第一次连接ssh ask确认3&#xff09;配置hosts三、开始编排 ansible playbook1&#xff09;创建目录2&#xff09;节点初始化3&#xff09;安装 docker4&#xff09;安装 k8s 相关组件5&#xff09…

2022 年 12 月区块链操作系统的开发回顾

正在寻找区块链操作系统组件的最新进展&#xff1f;你找对地方了&#xff01;正如在我们的路线图文章中所描述的那样&#xff0c;我们一直在朝着定期且频繁的更新方向发展着&#xff0c;以便让我们的社区能够及时的了解到我们取得的进展&#xff0c;以及将区块链操作系统提升到…

新年喜报 再添殊荣 加速科技荣获浙江省“专精特新”企业认定

新年伊始&#xff0c;杭州市经济和信息化局公布了2022年度浙江省专精特企业名单。杭州加速科技有限公司&#xff08;以下简称“加速科技”&#xff09;凭借在技术创新、产品研发、精细化程度、经营能力、拓展潜力等多方面的优势&#xff0c;荣获浙江省“专精特新”企业荣誉称号…

一个人,一座城,你到底在乎什么?Python 爬虫告诉你!

大家好&#xff0c;我是安果&#xff01;有时候&#xff0c;我们想知道生活在这座城市的人每天交流的事情&#xff0c;然后对数据进行一些分析&#xff0c;方便我们更好地了解城市的特征及居民的需求以重庆为例&#xff0c;最火爆的论坛是购物狂&#xff0c;每天都有大量的帖子…

求解带不确定事件的FJSP的多目标强化学习框架

文献&#xff1a;Hao Wang, Junfu Cheng, Chang Liu, Yuanyuan Zhang, Shunfang Hu, Liangyin Chen,Multi-objective reinforcement learning framework for dynamic flexible job shop scheduling problem with uncertain events,Applied Soft Computing,Volume 131,2022,1097…

超级详细的python知识点及练习题(附答案)

今天咱们继续来学习python的小知识吖&#xff0c;上一次木有看的同学请看&#xff1a;python8大核心语句 作者&#xff1a;阿玥的小东东 学习&#xff1a;python&#xff0c;正在学习c 主页&#xff1a;阿玥的小东东 目录 1.复习及易错&#xff0c;快来学习&#xff01;&#…

基于python手撕实现BP 神经网络实现手写数字识别

本项目使用python实现全连接网络和梯度优化 方向传播并且实现了 手写数字识别项目: 神经网络 model 先介绍个三层的神经网络,如下图所示输入层(input layer)有三个 units( 为补上的 bias,通常设为