蓝桥杯 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关键字private和publicstaticimport关键字- 输入: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(/* 参数列表 */) {// 方法体 }
- 返回类型
ReturnType定义一个方法时,我们首先要在方法名之前放置一个关键字表示该方法的返回类型,这个关键字代表的含义是方法执行完毕会返回什么类型的值。
main方法通常不返回结果,所以用void来修饰,因为它的主要目的是启动程序,而不是返回值。
- 函数名
methodType一个类可以有很多个方法(比如人的吃饭、睡觉),每个方法有不同的作用,为了区分这些方法,我们要给不同的方法起不同的方法名称,而且方法命名是有规范的,而这里由于是主方法,所以方法的名称为
main,且不可更改。
- 形参列表
方法名之后的括号内填充的就是形参列表,它定义了方法在被调用时传递给方法的信息,参数可以有多个,不同参数之间用逗号分隔。String[] args是
main方法的参数,它表示的含义是一个字符串数组。(这里也是固定写法)
- 方法体
从左花括号
{开始, 到右括号}结束,这一部分就是方法体,方法体中可以有很多行代码,方法体中代码的执行产生不同的结果。💡 经过了上面的解释之后,你或许对方法有了一些理解,也或许没有,但没关系,我们可以把方法想象成一个具有很多功能的盒子,这个盒子具有洗衣机、榨汁机的功能,方法的返回类型就代表盒子的种类,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);}} }
相关文章:
蓝桥杯 java基础
1. AB问题I 时间限制:2.000S 空间限制:32MB 题目描述 你的任务是计算ab。 输入描述 输入包含一系列的a和b对,通过空格隔开。一对a和b占一行。 输出描述 对于输入的每对a和b,你需要依次输出a、b的和。 如对于输入中的第二…...
火狐,要完了!
在过去几年中,关于Firefox 浏览器的衰落有过不少讨论。目前来说,很多公共的以及私营的大型网站都缺乏对Firefox的适当支持。但是Firefox也多次试图“自救”,甚至就在不久前,Mozilla 通过官博发文,表示 Firefox 在 2023…...
在AWS Lambda上部署EC2编译的FFmpeg工具——自定义层的方案
大纲 1 确定Lambda运行时环境1.1 Lambda系统、镜像、内核版本1.2 运行时1.2.1 Python1.2.2 Java 2 环境准备2.1 创建EC2实例 3 编译FFmpeg3.1 连接EC2 4 编译5 上传S3存储桶5.1 创建S3桶5.2 创建IAM策略5.3 创建IAM角色5.4 EC2关联角色5.5 修改桶策略5.6 打包并上传 6 创建Lamb…...
情深不必纠缠
那一年,男孩女孩在万千人中相遇了。多年后女人的一封邮件,让男人与女人的灵魂相遇了。他们无缘夫妻,却发现彼此是灵魂的陪伴。不能携手相守,却懂得彼此的心灵。 有一天,女人告诉男人要回家了,问男人心里会不…...
AIGC之Image2Video(一)| Animate Anyone:从静态图像生成动态视频,可将任意图像角色动画化
近日,阿里发布了Animate Anyone,只需一张人物照片,结合骨骼动画,就能生成人体动画视频。 项目地址:https://humanaigc.github.io/animate-anyone/ 论文地址:https://arxiv.org/pdf/2311.17117.pdf Github…...
区块链的可拓展性研究【04】分片
分片属于layer1扩容 区块链分片是一种技术实现,可以将区块链网络分成多个片段,每个片段负责处理一部分的交易数据。这种方法可以提高区块链网络的处理速度和吞吐量,降低交易确认时间和费用,同时也可以减轻节点运行负担。 在传统…...
blender 粒子系统 roughness 属性
粒子系统中的Roughness是一种用来控制粒子的随机性和不规则性的属性,它可以影响粒子的发射方向、速度、大小、旋转等。Roughness有以下几个子属性: - **Uniform**:这个属性用来控制粒子的发射方向的随机性,即粒子在法线方向上的偏…...
npm ERR! notarget No matching version found for @eslint/eslintrc@^2.1.4.
文章目录 Intro解决流程总结前置信息了解npm 镜像源三个要用到的npm命令 官方源确认查看当前镜像源的详情解决: 切换镜像源后重试重新操作 事后感受华为云再测试 Intro 事由是今天我在用 create-react-app 新建一个用于测试的前端项目。 然后就出现以下报错&#x…...
截取字符串
输入一个字符串和一个整数 k ,截取字符串的前k个字符并输出。 数据范围:字符串长度满足 1≤n≤1000, 1≤k≤n 输入描述: 1.输入待截取的字符串 2.输入一个正整数k,代表截取的长度 输出描述:截取后的字符串…...
【Python】Faker库详解:创建测试数据轻而易举
Python Faker库详解:创建测试数据轻而易举 在软件开发和测试过程中,通常需要大量的测试数据来模拟真实环境。Python的Faker库为开发者提供了一个方便、灵活且强大的工具,用于生成各种虚构数据。本文将深入介绍Faker库,演示其基本…...
Spring boot -- 学习HttpMessageConverter
文章目录 1. Json格式数据获取2. 为什么返回Json格式的数据2.1 注解SpringBootAppliaction2.1.1 SpringBootConfiguration2.1.2 ComponentScan2.1.3 EnableAutoConfiguration2.1.3.1 HttpMessageConvertersAutoConfiguration2.1.3.2 WebMvcAutoConfiguration 2.2 注解RestContr…...
如何选择合适的运筹优化求解器?
文章目录 前言求解器对比问题延伸:商用求解器和开源求解器的差别是什么? 求解器PK总结参考资料 前言 求解器对于运筹算法工程师而言,常常像一个黑盒,我们扔进去输入数据和数学模型,求解器给我们吐出一个解出来。这种状…...
Python 精讲 | 奇葩的 is
大家好,欢迎来到 Crossin的编程教室 ! 接下来的几个例子,可能会颠覆你对 Python 的认知。 我们知道,Python 判断两个数值是否相等的运算符是「」。比如有一个变量 a 是整数 1,另一个变量 b 是小数 1.0,尽管…...
遥感卫星综述(下载和预处理)(持续更新)
遥感卫星综述(下载和预处理) 目录 遥感卫星综述(下载和预处理)一、国产卫星GF-1 WFV 二、国外卫星Sentinel-1Sentinel-2 一、国产卫星 GF-1 WFV 下载 分辨率波段16m4(蓝、绿、红、近红) 预处理: ENVI预处理GF-1号W…...
Nmap脚本未来的发展趋势
Nmap脚本技术的发展趋势和前景 Nmap脚本是一种基于Lua语言开发的脚本,可以扩展Nmap的功能,用于自动化扫描、漏洞检测、服务探测、设备管理等方面。随着网络安全的不断发展和漏洞的不断出现,Nmap脚本技术也在不断发展和壮大。在本文中…...
要求CHATGPT高质量回答的艺术:提示工程技术的完整指南—第 17 章:对话提示
要求CHATGPT高质量回答的艺术:提示工程技术的完整指南—第 17 章:对话提示 对话提示是一种允许模型生成模拟两个或多个实体之间对话的文本的技术。 通过向模型提供上下文和一组角色或实体,以及他们的角色和背景,并要求模型生成他…...
urllib爬虫 应用实例(三)
目录 一、 ajax的get请求豆瓣电影第一页 二、ajax的get请求豆瓣电影前十页 三、ajax的post请求肯德基官网 一、 ajax的get请求豆瓣电影第一页 目标:获取豆瓣电影第一页的数据,并保存为json文件 设置url,检查 --> 网络 --> 全部 -…...
【数据挖掘】国科大苏桂平老师数据库新技术课程作业 —— 第三次作业
part 1 设计一个学籍管理小系统。系统包含以下信息: 学号、学生姓名、性别、出生日、学生所在系名、学生所在系号、课程名、课程号、课程类型(必修、选修、任选)、学分、任课教师姓名、教师编号、教师职称、教师所属系名、系号、学生所选课…...
TP5上传图片压缩尺寸
图片上传,最简单的就是, 方法一: 修改上传限制,不让上传大于多少多少的图片 改一下size即可,默认单位是B换算成M还需要除以两次1024 方法二: 对上传的图片进行缩放,此办法网上找了不少的代码…...
使用 Tailwind CSS 完成导航栏效果
使用 Tailwind CSS 完成导航栏效果 本文将向您介绍如何使用 Tailwind CSS 创建一个漂亮的导航栏。通过逐步演示和示例代码,您将学习如何使用 Tailwind CSS 的类来设计和定制导航栏的样式。 准备工作 在开始之前,请确保已经安装了 Tailwind CSS。如果没…...
AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...
Tauri2学习笔记
教程地址:https://www.bilibili.com/video/BV1Ca411N7mF?spm_id_from333.788.player.switch&vd_source707ec8983cc32e6e065d5496a7f79ee6 官方指引:https://tauri.app/zh-cn/start/ 目前Tauri2的教程视频不多,我按照Tauri1的教程来学习&…...
ZYNQ学习记录FPGA(二)Verilog语言
一、Verilog简介 1.1 HDL(Hardware Description language) 在解释HDL之前,先来了解一下数字系统设计的流程:逻辑设计 -> 电路实现 -> 系统验证。 逻辑设计又称前端,在这个过程中就需要用到HDL,正文…...
C++中vector类型的介绍和使用
文章目录 一、vector 类型的简介1.1 基本介绍1.2 常见用法示例1.3 常见成员函数简表 二、vector 数据的插入2.1 push_back() —— 在尾部插入一个元素2.2 emplace_back() —— 在尾部“就地”构造对象2.3 insert() —— 在任意位置插入一个或多个元素2.4 emplace() —— 在任意…...
深入浅出JavaScript中的ArrayBuffer:二进制数据的“瑞士军刀”
深入浅出JavaScript中的ArrayBuffer:二进制数据的“瑞士军刀” 在JavaScript中,我们经常需要处理文本、数组、对象等数据类型。但当我们需要处理文件上传、图像处理、网络通信等场景时,单纯依赖字符串或数组就显得力不从心了。这时ÿ…...
