当前位置: 首页 > news >正文

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

在这里插入图片描述

🌱博主简介:是瑶瑶子啦,一名大一计科生,目前在努力学习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区别和联系,环境变量

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

相关文章:

  • wordpress 图片放大/刷关键词排名软件
  • 网站建设专家收费标准/北京seo服务商找行者seo
  • 女女男做 网站/seo关键词推广优化
  • 贷款类的网站好做怎么做/百度域名注册
  • 外贸发货做网站怎么写/排名优化公司哪家好
  • 小程序登录不上去怎么办/优化网站搜索
  • 【AcWing周赛】AcWing第86场周赛
  • 一个人,一座城,你到底在乎什么?Python 爬虫告诉你!
  • 神奇的HTML系列专栏总目录
  • NET餐厅管理系统前端js-dwz.dialog改变原始层的大小
  • 【Linux】Ubuntu20.04.5安装ROS1【教程】
  • 使用隐马尔科夫模型实现分词
  • springboot,vue影院订票系统
  • 大数据之Kafka Shell命令和Java API
  • 〖百宝书-思维锻炼①〗——思维进阶和升华
  • SpringSecurity随笔(2)-OAuth2协议
  • 基于Java+SpringBoot+Vue在线培训考试系统设计与实现
  • 【云原生】k8s 一键部署(ansible)