L1-025 正整数A+B(Java)

题的目标很简单,就是求两个正整数A和B的和,其中A和B都在区间[1,1000]。稍微有点麻烦的是,输入并不保证是两个正整数。

输入格式:

输入在一行给出A和B,其间以空格分开。问题是A和B不一定是满足要求的正整数,有时候可能是超出范围的数字、负数、带小数点的实数、甚至是一堆乱码。

注意:我们把输入中出现的第1个空格认为是A和B的分隔。题目保证至少存在一个空格,并且B不是一个空字符串。

输出格式:

如果输入的确是两个正整数,则按格式A + B = 和输出。如果某个输入不合要求,则在相应位置输出?,显然此时和也是?。

输入样例1:

123 456

输出样例1:

123 + 456 = 579

输入样例2:

22. 18

输出样例2:

? + 18 = ?

输入样例3:

-100 blabla bla...33

输出样例3:

? + ? = ?

解题思路

  1. 题目要求是两个在[1,1000]的正整数的和。但是两个数不一定都是满足要求的正整数。
  2. 输出格式上需要对某个输入不合要求数字的位置改为?,和也应该是?
  3. 使用BufferedReader读取一行输入。(防止有运行超时问题
  4. 使用空格将输入分割成两个部分(r1和r2)。
  5. 分别尝试将这两个部分解析为整数(x1和x2)。
  6. 如果任一部分无法解析为有效的整数或者不在1到1000的范围内,相应的输出部分(s1或s2)被设置为"?"。
  7. 如果任一输入无效,总和(s3)也被设置为"?"。
  8. 根据s1、s2和s3的值,输出最终结果。

解题过程中遇到的问题

对于以下两种写法大多数情况是等效的,但是在处理特定输入时表现略有不同

第一种写法       
String[] s = in.readLine().split(" ");
String r1 = s[0];
String r2 = s[1];

第二种写法
String s = in.readLine();
String r1 = s.substring(0, s.indexOf(' '));
String r2 = s.substring(s.indexOf(' ') + 1);

如果使用第一种写法,会出现一种情况答案错误。

解析使用split(" ")和使用substring以及indexof(' ')的这两种方法
  1. 使用split(" ")的方法
    • 这种方法将字符串按照空格分割成一个字符串数组。如果输入中有多个连续的空格,split方法会将它们视为分隔符之间的空字符串。
    • 当输入恰好包含一个空格时,这种方法是有效的。但如果输入中包含多个连续的空格或者在开头/结尾有空格,这种方法可能导致数组包含空字符串或多于两个的元素。
    • 示例:对于输入 "123 456"(假设中间有多个空格),split(" ")将返回一个包含多个元素的数组,其中只有第一个和最后一个元素是有意义的数字字符串。
  1. 使用substringindexOf(' ')的方法
    • 这种方法直接寻找第一个空格的位置,并据此将字符串分割成两部分。它不会被连续的空格所影响。
    • 这种方法在输入中恰好有一个空格时效果最佳。如果有多个连续空格,它只会识别第一个空格,因此不会受到额外空格的影响。
    • 示例:对于同样的输入 "123 456",使用substringindexOf(' ')将只会识别第一个空格,并正确地将字符串分割为 "123""456"

总的来说,如果输入可能包含多个连续空格或在开头/结尾有空格,使用substringindexOf(' ')的方法更加可靠,因为它只关注第一个空格并据此分割字符串。相比之下,split(" ")可能会因为额外的空格而产生非预期的行为,尤其是当输入格式不严格时。

情况展示

第一种结果是使用以下代码

String[] s = in.readLine().split(" ");
String r1 = s[0];
String r2 = s[1];

第二种结果是使用以下代码(正确的处理)

String s = in.readLine();
String r1 = s.substring(0, s.indexOf(' '));
String r2 = s.substring(s.indexOf(' ') + 1);

代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        String s = in.readLine();
        String r1 = s.substring(0, s.indexOf(' '));
        String r2 = s.substring(s.indexOf(' ') + 1);
        String s1 = "", s2 = "", s3 = "";
        int n1 = 0, n2 = 0;

        try {
            n1 = Integer.parseInt(r1);
            if (n1 < 1 || n1 > 1000) {
                s1 = "?";
                s3 = "?";
            }
        } catch (NumberFormatException e) {
            s1 = "?";
            s3 = "?";
        }

        try {
            n2 = Integer.parseInt(r2);
            if (n2 < 1 || n2 > 1000) {
                s2 = "?";
                s3 = "?";
            }
        } catch (NumberFormatException e) {
            s2 = "?";
            s3 = "?";
        }

        System.out.print(s1.equals("") ? n1 + " + " : s1 + " + ");
        System.out.print(s2.equals("") ? n2 + " = " : s2 + " = ");
        System.out.println(s3.equals("") ? (n1 + n2) : s3);
    }
}

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

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

相关文章

Mindspore 公开课 - GPT

GPT Task 在模型 finetune 中&#xff0c;需要根据不同的下游任务来处理输入&#xff0c;主要的下游任务可分为以下四类&#xff1a; 分类&#xff08;Classification&#xff09;&#xff1a;给定一个输入文本&#xff0c;将其分为若干类别中的一类&#xff0c;如情感分类、…

嵌入式软件工程师面试题——2025校招社招通用(十八)

说明&#xff1a; 面试群&#xff0c;群号&#xff1a; 228447240面试题来源于网络书籍&#xff0c;公司题目以及博主原创或修改&#xff08;题目大部分来源于各种公司&#xff09;&#xff1b;文中很多题目&#xff0c;或许大家直接编译器写完&#xff0c;1分钟就出结果了。但…

pandas列与列之间的计算

1.简单计算 &#xff08;1&#xff09;首先导入pandas模块并读取数据 import pandas as pd adress"D:/pandas练习文件/计算.xlsx" datapd.read_excel(adress) &#xff08;2&#xff09; 计算销售额 销售额售价*销售数量 data["销售额"]data["售价&…

Unet系列网络解析

Unet UNet最早发表在2015的MICCAI上&#xff0c;到2020年中旬的引用量已经超过了9700多次&#xff0c;估计现在都过万了&#xff0c;从这方面看足以见得其影响力。当然&#xff0c;UNet这个基本的网络结构有太多的改进型&#xff0c;应用范围已经远远超出了医学图像的范畴。我…

Oracle常见操作

知识点1&#xff1a;格式化日期 select to_char(sysdate,yyyy-MM-dd HH:mm:ss) as time from dual;运行截图&#xff1a; 知识点2&#xff1a;解锁用户 alter user test account unlock;知识点3&#xff1a;修改密码 alter user test identified by test2;知识点4&#xff…

JVM-Arthas高效的监控工具

一、arthas介绍 3.选择监控哪个进程 4.进入具体进程 二、arthas的基础命令与基本操作 1.查询包含Java的系统属性&#xff1a; 命令&#xff1a;sysprop |grep java 1.查询不含Java的系统属性&#xff1a; 命令&#xff1a;sysprop | grep -v java 3.打印历史命令 命令&#…

vector容器解决杨辉三角

一、题目描述 118. 杨辉三角 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例 2: 输入: numRo…

008 Linux_文件在磁盘上的管理

前言 本文将会向你介绍文件在磁盘上是如何被管理的 磁盘的物理存储结构 系统中的文件分为被打开的文件&#xff0c;和没被打开的文件&#xff0c;被打开的文件在内存中进行管理&#xff0c;而没有被打开的文件则在磁盘中进行管理 同样地&#xff0c;也需要对这些没被打开的文…

Vulnhub靶机:driftingblues 5

一、介绍 运行环境&#xff1a;Virtualbox 攻击机&#xff1a;kali&#xff08;10.0.2.15&#xff09; 靶机&#xff1a;driftingblues5&#xff08;10.0.2.21&#xff09; 目标&#xff1a;获取靶机root权限和flag 靶机下载地址&#xff1a;https://www.vulnhub.com/entr…

实验 2:语法分析程序的设计——以LL(1)为例(更适合njupt体质的宝宝)

实验 2&#xff1a;语法分析程序的设计——以LL(1)为例 PS&#xff1a;源码私聊 1.实验软件环境 ​ 开发平台&#xff1a;Windows 11 ​ 编程语言&#xff1a;C ​ 编译器版本&#xff1a;GCC 11.20 C20 ​ IDE&#xff1a;VS Code 2.实验原理描述 求 F i r s t First Fi…

基于springboot数码论坛系统源码和论文

网络的广泛应用给生活带来了十分的便利。所以把数码论坛与现在网络相结合&#xff0c;利用java技术建设数码论坛系统&#xff0c;实现数码论坛的信息化。则对于进一步提高数码论坛发展&#xff0c;丰富数码论坛经验能起到不少的促进作用。 数码论坛系统能够通过互联网得到广泛…

如何判断售卖的医疗器械产品是二类还是三类

售卖医疗器械需关注产品本身是否为一、二、三类医疗器械。第一类医疗器械为一般项目的经营范围无需取得备案或许可证即可销售。第二类医疗器械产品需办理第二类医疗器械的备案方可销售。第三类医疗器械需取得医疗器械经营许可证且许可证上的经营范围需与销售的产品对应方可销售…

IIC协议

文章目录 IIC介绍通信距离通信速度主从方式通信方式物理结构 IIC协议空闲状态开始信号、结束信号和应答信号向从机发送数据的过程读取从机数据的过程数据有效性协议一帧构成 IIC介绍 IIC(Inter&#xff0d;Integrated Circuit)总线是一种由 PHILIPS 公司开发的两线式串行总线。…

ArkUI-X跨平台已至,何需其它!

运行环境 DevEco Studio&#xff1a;4.0Release OpenHarmony SDK API10 开发板&#xff1a;润和DAYU200 自从写了一篇ArkUI-X跨平台的文章之后&#xff0c;好多人都说对这个项目十分关注。 那么今天我们就来完整的梳理一下这个项目。 1、ArkUI-X 我们之前可能更多接触的…

class_5:在c++中一个类包含另一个类的对象叫做组合

#include <iostream> using namespace std;class Wheel{ public://成员数据string brand; //品牌int year; //年限//真正的成员函数void printWheelInfo(); //声明成员函数 };void Wheel::printWheelInfo() {cout<<"我的轮胎品牌是&#xff1a;"<…

MySQL之多表查询

1.创建student和score表 CREATE TABLE student ( id INT(10) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR(20) NOT NULL , sex VARCHAR(4) , birth YEAR, department VARCHAR(20) , address VARCHAR(50) ); 创建score表。SQL代码如下&#xff1a; CREATE TABLE sc…

数据库多表查询练习题

二、多表查询 1. 创建 student 和 score 表 CREATE TABLE student ( id INT ( 10 ) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR ( 20 ) NOT NULL , sex VARCHAR ( 4 ) , birth YEAR , department VARCHAR ( 20 ) , address VARCHAR ( 50 ) ); 创建 s…

02章【JAVA编程基础】

变量与标识符 变量 数学名词&#xff1a;变数或变量&#xff0c;是指没有固定的值&#xff0c;可以改变的数。变量以非数字的符号来表达&#xff0c;一般用拉丁字母。变量是常数的相反。变量的用处在于能一般化描述指令的方式。计算机解释&#xff1a;变量就是系统为程序分配…

IOS自动化测试元素定位

一、元素属性介绍 1、元素属性 2、查看各定位方式执行效率 二、iOS常用定位方法 1、accessibility_id 2、class_name 3、Xpath 4、ios_class_chain(类型链) 5、ios_predicate(谓词) 一个页面最基本组成单元是元素&#xff0c;想要定位一个元素&#xff0c;我们需…

德语B2 SampleAcademy

德语B2 SampleAcademy 一, Zweigliedrige Konnektion1, entweder... oder2, nicht nur... sondern auch3,sowohl... als auch4,einerseits... andererseits5, zwar...aber6, weder...noch7,je...desto/umso 一, Zweigliedrige Konnektion discontinuous conjunctions 1,…