蓝桥杯 java基础

1. A+B问题I

时间限制:2.000S  空间限制:32MB

题目描述

你的任务是计算a+b。

输入描述

输入包含一系列的a和b对,通过空格隔开。一对a和b占一行。

输出描述

对于输入的每对a和b,你需要依次输出a、b的和。

如对于输入中的第二对a和b,在输出中它们的和应该也在第二行。

输入示例
3 4
11 40
输出示例
7
51


1. A+B问题I

前言

本节课你将学到的内容

  • 变量定义
  • 基本数据类型
  • 面向对象
  • 类的定义、属性和方法
  • new关键字
  • privatepublic
  • static
  • import关键字
  • 输入:Scanner类的使用
  • 输出语句
  • while控制多次输入

类和面向对象

你有对象吗?没有,new一个啊。

都说Java是一门面向对象的语言, 而且是“万物皆对象”,那该怎么理解这句话呢?

这里的“对象”实际上是对现实世界中所存在的事物的一种抽象,举个例子,你在计算机世界中怎么表示“人”这个概念呢?

我们可以将之抽象为一个类Person, 并具有一些“属性”和“方法”。

  • “属性”表示Person类所具有的特征,比如姓名、年龄、性别,通过这些特征,我们可以描述一个“人”的基本状态。
  • “方法”表示Person类的行为和功能,比如吃饭、睡觉、行走,通过这些动作,我们可以描述一个“人”的动态行为。

比如下面的“伪代码”表示Person类的定义, 它包括姓名、性别、年龄和吃饭的方法。

Person {// 姓名、性别、年龄等属性name;gender;age;// 吃饭的方法eat() {}// 行走的方法walk() {}
}

这样在计算机世界,一个“人”的概念就建立起来了,但这里的Person类只是个“模具”,空有概念,而无法表示具体的某一个人,只有创造一个类的实例(也就是我们说的对象),比如"张三,18, 男", "李明、20,男",才能真正的使用,而创建Person实例需要使用new关键字。

// new Person()创建一个实例
// 将这个实例起名为xiaoming
// Person xiaoming表示这是一个Person的实例,xiaoming属于Person这种类型
Person xiaoming = new Person();

现在你是不是能对面向对象有一些初步的理解了呢?

简而言之,“类”是现实世界中的实体在计算机世界中的抽象概念,类可以看作是对象的模板,它定义了对象的结构和行为方式,而对象是“类”的实现。

程序基本结构

在了解了Java类和对象的基本概念之后,我们开始尝试编写一些简单的java代码,如果你之前没有接触过java,甚至是没有接触过编程语言,可能很难去理解为什么要这样写,但是没关系,编程最开始往往是从“死记硬背”开始的,我们暂时只需要知道这是java程序必须有的结构就可以,后面我们会进行详细的解释,从而帮助你更好的理解它。

我们一般使用代码编辑器来书写代码,书写时,我们会创建一个.java文件,比如Main.java, 而在任何一个Java程序中,都必须包括下面的基本结构:

public class Main {public static void main(String[] args) {}
}

一共有两行代码,我们一行一行的解释

// 使用class关键字定义一个public(公开)类,类的名称是Main
public class Main {}

之前我们提到了,我们创建了一个Main.java文件,在这个文件中,必须存在一个与该文件同名的类,类要使用class这个关键字里定义,Main是类的名称, 类的名称通常以大写字母开头, public表示这个类是公开的,这意味着你可以在任何其他类中访问。

此外类中还必须包括一个方法main, Java程序总是从main方法开始执行,表示这是Java程序的入口, 下面的代码是main方法的固定写法。

public static void main(String[] args) {}
  • public是一个访问修饰符, 除了可以修饰class外,也可以修饰方法,表示该方法是公开的,对于main来说,它必须是public的。

  • 关键字static是另一个修饰符,它表示静态方法,后面我们会讲解方法的类型,目前,我们只需要知道,Java入口程序规定的方法必须是静态方法。

  • void 表示该方法不返回任何值。

  • main是方法的名称,作为程序的入口点,而且入口的名称方法名必须为main

  • String[] args:这是 main 方法的参数。

方法的组成

我们提到了一个类中会包含属性和方法,也通过程序基本结构这两行代码知道了main方法的写法,那方法的通用写法是怎样的呢?

实际上一个方法主要包含四个部分:

  • 返回类型
  • 方法名
  • 形参列表
  • 方法体
ReturnType methodName(/* 参数列表 */) {// 方法体
}
  1. 返回类型ReturnType

定义一个方法时,我们首先要在方法名之前放置一个关键字表示该方法的返回类型,这个关键字代表的含义是方法执行完毕会返回什么类型的值。main 方法通常不返回结果,所以用void来修饰,因为它的主要目的是启动程序,而不是返回值。

  1. 函数名methodType

一个类可以有很多个方法(比如人的吃饭、睡觉),每个方法有不同的作用,为了区分这些方法,我们要给不同的方法起不同的方法名称,而且方法命名是有规范的,而这里由于是主方法,所以方法的名称为main,且不可更改。

  1. 形参列表

方法名之后的括号内填充的就是形参列表,它定义了方法在被调用时传递给方法的信息,参数可以有多个,不同参数之间用逗号分隔。String[] args是 main 方法的参数,它表示的含义是一个字符串数组。(这里也是固定写法)

  1. 方法体

从左花括号{开始, 到右括号}结束,这一部分就是方法体,方法体中可以有很多行代码,方法体中代码的执行产生不同的结果。

💡 经过了上面的解释之后,你或许对方法有了一些理解,也或许没有,但没关系,我们可以把方法想象成一个具有很多功能的盒子,这个盒子具有洗衣机、榨汁机的功能,方法的返回类型就代表盒子的种类,A类型就代表这是一个洗衣机,返回的结果是衣服,B类型代表这是一个榨汁机,返回的结果是果汁,方法是你给这个盒子起的昵称,它可以按照规则去定义,只不过如果是main方法,它的名称就不可更改了,方法的形参列表就是我们往盒子扔进去的东西,我们可以把衣服或者水果放进去,而方法体是我们放进去的东西要经历的处理过程,经过方法的处理之后,返回的内容就是我们想要的结果。

让我们再重新认识一下刚才写的代码吧:

// public 和 static 是修饰符,分别表示公开方法和静态方法
// void 表示方法的返回类型为空
// main是方法的名称,不可更改
// String[] args表示方法的参数
public static void main(String[] args) {}

输入输出

现在我们开始尝试正式进入本题了,题目要求我们输入一系列的 a 和 b, 并计算 a 和 b 的和,计算和很简单,只需要将a + b即可,但我们首先要解决的问题实际上是如何从键盘上读取我们输入的数。

幸运的是,Java已经帮助我们提供了一些操作,帮助我们进行输入和输出操作。

在Java中,你可以使用标准输入(System.in)进行输入操作,使用标准输出(System.out)来进行输出操作,此外还需要使用到 Scanner 类(Java标准库中的一个类)。

  • System.in 是一个标准的输入流,它允许你从控制台(键盘)获取用户输入的数据。
  • Scanner 是 Java 中的一个类,它位于 java.util 包中,它提供了一种简便的方式来处理输入数据。

它的使用代码是这样的:

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);sc.close(); // 关闭Scanner对象}
}

在使用Scanner时,需要从Java的工具库util中引入,引入操作需要使用到import关键字

// 引入Scanner
import java.util.Scanner;

在之前,我们讲述了类和对象,想要将类实例化(也就是创造一个对象实例),需要使用new关键字, 实例化的时候,我们需要用一个“名称”(变量)来代表这个对象,比如创造Person实例时的“张三、李四”就是这个对象的名字,名称前面要加上类名,表示变量是这种类型。

// new Scanner(Symtem.in)创建了一个 Scanner 对象
// 给对象起了个名称sc, sc前面的Scanner表示sc是Scaner
Scanner sc = new Scanner(System.in);

变量

我们已经知道了可以使用标准输入(System.in)进行输入操作,可是我们还有一个问题需要解决,那就是:系统怎么认识和标识我们输入的数字呢?比如说,我们想要输入两个数字100、100,系统如果使用100来标识100,那另外一个100应该怎么标识呢?

所以我们就需要在系统内部使用某样东西来指代和标识输入的内容,比如x = 100; y = 100, 这里的x, y

在数学中被称为变量,在编程中也被称为变量,用来指代内容。

不过在数学中有整数、小数之分,那计算机在存储的时候也应该知道我们输入的x是一个什么类型的数字,这里我们输入的是整数,也就是前面使用的int类型。

所以我们首先需要定义两个变量a,b代码这么写:

int a; // 定义一个变量,名称为a, 用于接收一个整数
int b; // 定义一个变量,名称为b, 用于接收一个整数

为了简略,我们可以将代码写在一行,然后将类型略去,变量中间用逗号分隔。

int a, b;

在定义变量的时候,也可以给他一个初始值,如果不写初始化值的话,系统会帮助我们设置一个默认值0

int a = 1; // 定义一个整数类型变量,并赋予初始值1

程序编写

现在我们就可以使用一个变量来保存使用Scanner读取的数字了,Scanner使用nextInt()方法读取并返回下一个整数,我们使用该方法读取两个整数,并存放在变量a和变量b中。

int a = sc.nextInt(); // 读取下一个整数,并将之赋值给变量a
int b = sc.nextInt(); // 读取下一个整数,并将之赋值给变量b

读取完两个整数的输入之后,我们需要计算a + b的值并将其输出, 输出语句如下

System.out.println(a+b); // System.out.println()用于将括号内的内容输出到屏幕上。
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int a = sc.nextInt();int b = sc.nextInt();System.out.println(a+b);sc.close(); }
}

但是上面的代码只能满足一次输入输出,也就是说只能输入输入一组a和b, 但是题目要求输入包含一系列的a和b,难道有一千组数据,我们需要书写一千行上面的代码嘛,更糟糕的是,我们并不知道一系列数据到底是多少组数据?

这个时候,我们可以使用“循环结构”while, while循环表示只要给定的条件是真的,就反复执行这一段代码,直到条件变假为止。

下节课中,我们会对while进行详细的解释,这里只需要明白代码的基本意思即可。

while(条件) {// 循环代码块
}

在每次循环中,会判断条件的真假。如果条件为真,循环体内的代码块会被执行。然后,循环会再次检查条件,并根据条件的真假决定是否继续执行循环体。

while循环可以这样理解,假设条件为“我还没有学会Java”, 只要这个条件还是真的(判断条件的真假),我就会每天坚持努力学习(循环体),如果我已经学会了Java, 我才会停止学习(退出这个循环)。

所以下面的代码就表示持续输入a 和 b,直到判断没有下一个输入时才会结束。

// 只要输入中还有下一个整数,就会继续执行循环内部的代码
while(sc.hasNextInt()) {int a = sc.nextInt();int b = sc.nextInt();System.out.println(a+b);
}

那么完整代码如下:

// 引入Scanner
import java.util.Scanner;public class Main {public static void main(String[] args) {// 创造一个Scanner对象Scanner sc = new Scanner(System.in);// 判断是否还有下一个数据while(sc.hasNextInt()) {// 读取两个整数并将它们存储在变量 a和 b中int a = sc.nextInt();int b = sc.nextInt();// 输出a和b的值System.out.println(a+b);}sc.close(); // 关闭Scanner对象}
}

延伸

除了int类型之外,Java语言还有一些其他的数据类型用于存储整数、浮点数、字符和布尔值这些原始数据,而这些基本数据类型就是构建一个对象的基础。

整数类型(Integer Types)

  • byte:在计算机存储中占用1个 字节,表示的范围 -128 到 127。
  • short:在计算机存储中中占用2个字节,范围 -32,768 到 32,767。
  • int:4 字节,范围约为 -231到231-1。
  • long:8 字节,范围约为-263到263-1。
byte score = 98;
short age = 130;
int count = 100000;
long gdp = 10000000000L;

浮点数类型:用于表示包含小数部分的数字

  • float:单精度浮点数,占用4个字节,通常用于存储较小的浮点数。
  • double:双精度浮点数,占用8个字节,通常用于存储较大或更精确的浮点数。
float floatValue = 3.14159f; // 使用 'f' 后缀表示 float
double price = 2.99; // 默认是double类型

字符类型char: 用于存储一个字符(用单引号括起来表示),比如字符'A'以及字符'1'。

char grade = 'A';
char ch2 = '1';

布尔类型(Boolean Type)

  • boolean:表示布尔值,只有两个取值:true (真)和 false(假)
boolean flag = true;

因为有不同的数据类型,在实际应用中,你可以根据需要使用不同的 Scanner 方法来读取不同类型的数据。

  • next():读取下一个字符串。
  • nextInt():读取下一个整数。
  • nextDouble():读取下一个双精度浮点数。
  • nextLine():读取下一行文本。
  • hasNext():判断是否还有下一个输入项。如果有,返回 true;否则返回 false
  • hasNextInt():判断是否还有下一个整数输入项。
  • hasNextDouble():检查是否还有下一个双精度浮点数输入项。

对于这些方法,目前大家只需要留有一个印象即可,我们后面会通过练习接触到这些方法。

访问修饰符

在程序基本结构中,我们介绍了用public来修饰类, 这里的public是一个访问修饰符,可以用来修饰类、属性或者方法,表示被修饰的成员对于其他所有类都是可见的。

public class A {public int age;
}public class B {// 可以在B类中直接使用age
}

除了public外,还有private修饰符和一些其他的修饰符,private表示被修饰的成员只能在包含它的类中被访问, 其他类无法访问类中的 private 成员。这通常用于隐藏类的内部细节。

public class A {private int age;
}
public class B {// 无法在 B 类中直接使用age
}

访问修饰符的使用取决于设计目标和需求。通常,应该尽量将成员定义为 private,以实现数据隐藏和封装,只在需要时提供公共接口。

总结

本节课,我们知悉了类和对象的基本概念,并通过a和b的多组输入了解了java的基础结构、变量、输入输出、while循环等基础语法。

java代码实现:

import java.util.Scanner;
public class Main{public static void main(String[] args){Scanner sc=new Scanner(System.in);while(sc.hasNextInt()){int a=sc.nextInt();int b=sc.nextInt();int sum=(a+b);System.out.println(sum);}}
}

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

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

相关文章

面试经典150题(5-7)

leetcode 150道题 计划花两个月时候刷完,今天(第二天)完成了两道(5-7)150: (169. 多数元素) 题目描述: 给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋…

int 和 Integer 有什么区别,还有 Integer 缓存的实现

✨前言✨   Java本文主要介绍Java int 和 Integer的区别以及Integer 缓存的实现 🍒欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍒博主将持续更新学习记录收获,友友们有任何问题可以在评论区留言 文章目…

用C++实现队列顺序结构的基本操作

//队列顺序结构的基本操作: #include"stdio.h" #include"String" #define QueueSize 100 typedef char ElemType; typedef struct { ElemType data[QueueSize]; /*保存队中元素*/int front,rear; /*队头和队尾指针*/ } SqQueue; void Init…

使用STM32定时器实现精确的时间测量和延时

✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进, 代码获取、问题探讨及文章转载可私信。 ☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。 🍎获取更多嵌入式资料可点击链接进群领取,谢谢支持!…

stm32Flash操作

//G0B0 flash大小 0x08000000-0x0807FFFF 512K(0400 1K)//2k 1页 //初始化标记数据地址 放最前面 脱机烧写器可擦除掉 #define CONST_INITMARKDATA_ADDRESS (0x0807D000UL) //2k 1页 //射频数据地址 #define CONST_FREQDATA_ADDRESS (0x0807F000UL) //2…

大数据技术4:Lambda和Kappa架构区别

前言:在大数据处理领域,两种突出的数据架构已成为处理大量数据的流行选择:Lambda 架构和 Kappa 架构。这些架构为实时处理和批处理提供了强大的技术解决方案,使组织能够从其数据中获得有价值的见解。随着互联网时代来临&#xff0…

Python VSCode 配置固定的脚本入口

Python VSCode 配置固定的脚本入口 打开或者新建一个启动配置 选择 .vscode目录下 launch.json文件 将 “program”: “${file}” 替换成 “program”: “mian.py”, //完成你自己的入口.py文件名即可 json启动配置文件 {// Use IntelliSense to learn about possible attrib…

4-redis高级-redis持久化(RDB 持久化方案、AOF持久化、RDB和AOF混合持久化)、redis主从复制

1 redis持久化 1.1 RDB 持久化方案 1.2 AOF持久化 1.3 混合持久化 2 redis主从复制 1 redis持久化 # 把redis数据从内存保存到硬盘上的过程称之为持久化# 所有的数据库,持久化方案快照:某时某刻数据的一个完成备份-mysql的Dump: mysqldump …

【ELK03】ES 索引的Mapping映射详解、数据类型和settings属性设置

一、ES 索引的映射和设置 1.MAPPING 映射(MAPPING)就是es中一个决定了文档如何存储,如何生成索引,字段各种类型定义的过程.类似于我们在关系型数据库中创建一个表格数据之前先定义表格有哪些字段,每个字段是什么类型,然后数据会按照这个配置写入表格,ES中同样是这个过程,它由…

数据结构:顺序表——相关习题2

【2018统考】给定一个含n个整数的数组&#xff0c;设计一个时间上尽可能高效的算法&#xff0c;找到数组中未出现的最小正整数。 void find_min_intnum(int A[],int n){int B[5*n]{0};int i;for (i 0; i < n; i){if(A[i]>0){B[A[i]];}}for(i1;i<5*n;i){if(B[i]0){pr…

面向对象中的单例模式

1、什么是设计模式 设计模式就是前人根据实际的问题提出的问题解决方案&#xff0c;我们把这种就称之为设计模式。 2、单例模式 单例模式是一种常见的设计模式&#xff01; 所谓的设计模式&#xff0c;不是一种新的语法&#xff0c;而是人们在实际的应用中&#xff0c;面对…

【银行测试】金融项目+测试方法范围分析,功能/接口/性能/安全...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、金融行业软件特…

3GPP标准查看、下载和几个UE相关系列标准

由于一直做终端侧协议。最近以UE为核心重新下载了一系列文档。 总结并举例一下分类标准。 如何查看3GPP标准列表 实际上在3GPP网站如下链接&#xff1a;Specifications by Series&#xff0c;每个系列以及分类都说的很清楚。 几个系列分类举例 和终端协议层工作比较关系密切…

如何使用Java Websocket实现实时数据监控功能?

随着互联网应用的不断发展&#xff0c;实时数据监控功能成为了许多应用的必备功能之一。本文将介绍如何使用Java WebSocket实现实时数据监控功能&#xff0c;并提供具体的代码示例。 关键词&#xff1a;Java WebSocket、实时数据监控、代码示例 一、什么是WebSocket&#xff…

ModuleNotFoundError: No module named ‘dlib‘

解决&#xff1a;ModuleNotFoundError: No module named ‘dlib’ 文章目录 解决&#xff1a;ModuleNotFoundError: No module named dlib背景报错问题报错翻译报错位置代码报错原因解决方法方法一&#xff0c;直接安装方法二&#xff0c;手动下载安装方法三&#xff0c;编译安…

setuid 的风险及开发过程中的避免方式

使用setuid&#xff08;Set User ID&#xff09;功能将执行程序的有效用户 ID 设置为文件所有者的用户 ID。这意味着执行程序将以文件所有者的特权运行&#xff0c;而不是以执行者自己的特权运行。 尽管setuid是一个有用的功能&#xff0c;但它也会带来一些安全风险。下面是几…

Linux C语言 37- 进程间通信IPC

Linux C语言 37-进程间通信IPC 本节关键字&#xff1a;C语言 进程间通信 信号 管道 消息队列 共享内存 网络通信&#xff08;套接字&#xff09; 相关库函数&#xff1a; 提示&#xff1a;先做内容框架梳理&#xff0c;后期进行完善补充&#xff01; 什么是进程间通信&#…

blender 数字键盘上的快捷键

数字0可以切换到相机视角&#xff0c;即从相机的位置和角度查看场景。数字1、3、7分别可以切换到正交的前视图、右视图和顶视图&#xff0c;即沿着X、Y、Z轴的垂直投影。数字5可以切换正交视图和透视视图&#xff0c;即是否考虑远近的视觉差异。数字2、4、6、8分别可以顺时针或…

SD之lora训练

目录 为什么要训练自己的模型 SD模型微调方法 准备素材 1 确定要训练的LoRA类型 2 图片收集 3 图片预处理 4 图片标注 安装Koyha_ss 训练lora 1.准备参数和环境 2.启动训练 使用模型 1 拷贝训练过的lora模型 2 启动SD WebUI进行图像生成 为什么要训练自己的模型 …

webpack该如何打包

1.我们先创建一个空的大文件夹 2.打开该文件夹的终端 输入npm init -y 2.1.打开该文件夹的终端 2.2在该终端运行 npm init -y 3.安装webpack 3.1打开webpack网址 点击“中文文档” 3.2点击“指南”在点击“起步” 3.3复制基本安装图片画线的代码 4.在一开始的文件夹下在创建一…