票据查重查漏问题

题目背景

某涉密单位下发了某种票据,并要在年终全部收回。

题目描述

每张票据有唯一的 ID 号,全年所有票据的 ID 号是连续的,但 ID 的开始数码是随机选定的。因为工作人员疏忽,在录入 ID 号的时候发生了一处错误,造成了某个 ID 断号,另外一个 ID 重号。

你的任务是通过编程,找出断号的 ID 和重号的 ID。

数据保证断号不可能发生在最大和最小号。

输入格式

一个整数 N(N<100) 表示后面数据行数,接着读入 N 行数据,每行数据长度不等,是用空格分开的若干个(不大于 100100 个)正整数(不大于 105105),每个整数代表一个 ID 号。

输出格式

要求程序首先输入要求程序输出 11 行,含两个整数 m,n,用空格分隔,其中,m 表示断号 ID,n 表示重号 ID。

package 练习; 
import java.util.*; 
public class 俩 {public static void main(String[] args) {Scanner scan = new Scanner(System.in);int n = scan.nextInt(); 
int without = 0,more = 0;int x;List<Integer> list = new ArrayList<>(); 
for(int i = 0;i < n;i ++){String[] s = scan.nextLine().split(" ");int[] a=new int[s.length];for(int j = 0;j < s.length;j ++) {a[i]=Integer.valueOf(s[i]);x = a[i];if(! list.contains(x)) list.add(x); else  more = x; } 
} 
Arrays.sort(a);for(int k = 0 ; k < a.length ;k ++) if(a[k] != a[k - 1]) without = a[k]; 
System.out.println(without + " " + more); } } 

当我把别人的循环代码生搬硬套地抄上去的时候再次基础上改了一下再加上机器人的帮助还是通过不了的代码。结果Eclipse一直报错说,a没办法被范围识别到。我去查了一下通义千问,虽然我没有看懂它说的,但是我一看代码发现了:

int[] a=new int[s.length];

每次循环都会建立新的数组a[ ],但是转念一想就算是这样的问题使得我的把所有数据存进数组a的愿景失败了,也会有最后一组a[ ]里面也有最后一行数据,于是我猜测是数组a被放在了for循环里导致的(尽管我记得好像c语言里的这样结构不会有这样的问题)。后来我把数组放在循环之前定义好这个问题就解决了。(这些其实都是后面想到了,我写博客的时候没有理清楚)

其中的

在Java中,你可以使用Integer.parseInt()Integer.valueOf()方法将字符串"123"转换为整数。以下是这两种方法的示例:

String strNumber = "123";
2int number = Integer.valueOf(strNumber);
3System.out.println(number);  // 输出:123
String strNumber = "123";
2int number = Integer.parseInt(strNumber);
3System.out.println(number);  // 输出:123

我去找了通义千问,它说:

package 练习;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;public class Two {public static void main(String[] args) {Scanner scan = new Scanner(System.in);int n = scan.nextInt();int without = Integer.MAX_VALUE, more = 0;List<Integer> list = new ArrayList<>();for (int i = 0; i < n; i++) {String[] s = scan.nextLine().split(" ");int[] a = new int[s.length];for (int j = 0; j < s.length; j++) {a[j] = Integer.parseInt(s[j]); // 修改为 a[j]x = a[j];if (!list.contains(x)) {list.add(x);} else {more = x; // 这里仅仅覆盖了 more 的值,但没有记录所有重复元素}}}Arrays.sort(a);for (int k = 0; k < a.length && a[k] != a[k - 1]; k++) { // 改进循环条件without = Math.min(without, a[k]); // 更新 without 为当前遍历到的不重复元素的最小值}System.out.println(without + " " + more);}
}

结果——这个错误提示表明在尝试将空字符串 ("") 转换为整数时发生了 NumberFormatException。在您的代码中,第 13 行的 Integer.valueOf(s[i]) 遇到了空字符串输入。

是的新的问题又出现了

String[] s = scan.nextLine().split(" ");
int[] a = new int[s.length];
for (int j = 0; j < s.length; j++) {String currentString = s[j].trim(); // 先移除前后空白字符if (!currentString.isEmpty()) { // 检查字符串是否为空a[j] = Integer.parseInt(currentString);x = a[j];if (!list.contains(x)) {list.add(x);} else {more = x;}} else {// 处理空输入,可以选择忽略、提示错误或终止程序System.out.println("Encountered empty input, ignoring...");}
}

我试着用了用这个移除前后空白字符和检查字符串是否为空的部分,问题似乎得到了解决,至少不再有同样的报错了。由于我不懂这个原理,于是我把“改好”后的代码交给AI继续修改时又错误时,后面又反复试了几次,屡战屡败,此时我意识到高太多自己不会的就是在凑了,凑好了当然好,但是现在凑不好,很麻烦。我放弃了这个思路,转而思考起最开始提取代码段的来源是否正确,实验证明我搞来的循环提取代码是没有问题的。

中间经过了一些事情在另外一篇博客那里。

第二天我偶然想到把用Arraylist直接判断就行了,但是后来发现这个方法其实只能找出重复值。但苦于无法改变加上代码的简洁性使我在另外一个类里保存了它。后来想来想去,还是只能把判断缺少数拿出来用数组来判断。

我用x接收字符串转化成的数字,然后把它赋值给数组a。由于我在for之前定义了一个数组,所以我只能指定一个较大的数组a[1000]但这是样的化有的就用不上了,于是我就不得不考虑那些我没用上的了,AI告诉我

在Java中,当你定义了一个数组但没有为其赋值时,数组的元素并不会有一个默认的数值。数组的所有元素将保持未初始化状态,也就是说,它们的值是不确定的,也可以说它们包含的是垃圾值(garbage values)。

对于基本类型数组(如int, double, char等),元素的值是随机的,取决于内存中该位置的原有内容。因此,直接访问未初始化的数组元素会导致不可预知的行为,并可能引发`NullPointerException`(如果数组引用是null)或`ArrayIndexOutOfBoundsException`(如果访问了不存在的索引)。

对于引用类型数组(如Object类型),元素的默认值是`null`,这意味着它们不会指向任何对象实例。

所以在实际编程中,一定要确保在使用数组元素之前对其进行初始化。

使用Arrays.fill()方法初始化数组为0也可以对非new初始化:

int[] array1D = new int[10];
5Arrays.fill(array1D, 0);

我发现我的时 int[ ] a = new int[1000];

于是就可以有

for(int i = 1;i < a.length ;i ++){if(a[i] == 0)continue;else if(a[i - 1] != 0 && a[i] != a[i - 1] + 1) {without = a[i] - 1;break;}}

报错、调试(错得越来越对),再解决了一个个小问题之后我终于得到了。

package 练习;
import java.util.*; 
public class 俩 {public static void main(String[] args) {Scanner scan = new Scanner(System.in);int[] a=new int[100];int n = scan.nextInt();int without = 0,more = 0;int begin = 0;List<Integer> list = new ArrayList<>();scan.nextLine();for(int i = 0;i < n;i ++){String[] s = scan.nextLine().split(" ");int end = begin + s.length;int k =0;for(int j = begin ;j < end;j ++) {int x = Integer.valueOf(s[k]);if(! list.contains(x)) {list.add(x);a[j] = x;}elsemore = x;k ++;}begin += s.length;}Arrays.sort(a);for(int i = 1;i < a.length ;i ++){if(a[i] == 0)continue;else if(a[i - 1] != 0 && a[i] != a[i - 1] + 1) {without = a[i] - 1;break;}}System.out.println(without + " " + more); }
}

这次不再有任何问题了。

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

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

相关文章

HCIP —— 多生成树 (MSTP)

MSTP --- Multiple Spanning Tree Protocol --- 802.1s 在 MSTP 中 &#xff0c;提出了实例的概念&#xff0c;相当于可用让多个VLAN同时属于一个实例&#xff0c;然后只需要一个实例生成一棵树。 --- 一种 VLAN 分流的思想 实例ID &#xff1a;instance ID 由 12位 二进制…

windows安装tomcat

安装之前需要安装jdk1.8可以参考windows安装jdk1.8-CSDN博客 一、下载tomcat Apache Tomcat - Apache Tomcat 8 Software Downloads 解压到D盘的D:\Program Files\tomcat目录下 二、配置环境变量 电脑右键属性-高级系统设置-高级-环境变量 1、在系统变量配置CATALINA_HOME环…

掌握ES6的箭头函数:深入了解其实用性与规则

引言 ES6&#xff08;ECMAScript 2015&#xff09;引入了箭头函数&#xff0c;这是一种新的函数声明方式&#xff0c;它改变了我们编写JavaScript代码的方式。箭头函数提供了更简洁、更直观的语法&#xff0c;并且具有一些独特的特性和行为。本文将深入探讨箭头函数的规则、用…

将word转为PDF的几种简单方式

第一种&#xff1a;使用spire.doc.jar包&#xff0c;用时7秒左右。 引入spire.doc-11.1.1.jar包&#xff0c;该包带水印&#xff0c;建议使用免费版的spire.doc.free-5.2.0.jar&#xff0c;免费版只能转三页。 package web.tools.excel; import com.spire.doc.*; public cl…

【分布式】——降级熔断限流

降级&熔断&限流 ⭐⭐⭐⭐⭐⭐ Github主页&#x1f449;https://github.com/A-BigTree 笔记仓库&#x1f449;https://github.com/A-BigTree/tree-learning-notes 个人主页&#x1f449;https://www.abigtree.top ⭐⭐⭐⭐⭐⭐ 如果可以&#xff0c;麻烦各位看官顺手点…

mysqldump 备份与恢复

1. mysqldump 简介 mysqldump 是 MySQL 提供的一个命令行工具&#xff0c;用于备份 MySQL 数据库的结构和数据。它能够生成一个包含 SQL 语句的文本文件&#xff0c;以便在需要时恢复数据库。 2. mysqldump 备份数据库 要备份一个或多个数据库&#xff0c;可以使用 mysqldum…

uniApp中使用小程序XR-Frame创建3D场景(2)加载模型

上篇文章讲述了如何将XR-Frame作为子组件集成到uniApp中使用&#xff0c;只完成了简单的环境搭建&#xff0c;这篇文章讲解如何加载3D模型。 1 加入模型加载标签 在XR-Frame框架中&#xff0c;加载资源都是在wxml文件的标签中实现的。下面是wxml中完整的代码 index.wxml &l…

spark-submit 主要参数详细说明及Standalone集群最佳实践

文章目录 1. 前言2. 参数说明3. Standalone集群最佳实践 1. 前言 部署提交应用到 spark 集群&#xff0c;可能会用到 spark-submit 工具&#xff0c;鉴于网上的博客质量残差不齐&#xff0c;且有很多完全是无效且错误的配置&#xff0c;没有搞明白诸如--total-executor-cores …

Idea与Maven版本不一致问题

Idea拉取Jar包&#xff0c;报Unable to import maven project: See logs for details 查看日志信息No implementation for org.apache.maven.model.path.PathTranslator was bound 解决办法&#xff1a; IDEA执行Maven报错 Unable to import maven project: See logs for d…

PC电脑技巧[笔记本通过网线访问设备CMW500]

笔记本局域网访问设备 现在我有一台CMW500,我要用笔记本去访问它,但是我发现没有路由器就是不能够访问,通过网线连接设备就是ping不通: 这里设置TCP/IPv4的IP地址如下,这时候就可以pin通了:

论文篇05-论文范文-论数据访问层设计技术及其应用(2024年软考高级系统架构设计师冲刺知识点总结系列文章)

试题:论数据访问层设计技术及其应用 在信息系统的开发与建设中,分层设计是一种常见的架构设计方法,区分层次的目的是为了实现“高内聚低耦合”的思想。分层设计能有效简化系统复杂性,使设计结构清晰,便于提高复用能力和产品维护能力。一种常见的层次划分模型是将信息系统分…

nRF52832——定时器 TIME

nRF52832——定时器 TIME 原理分析定时器定时功能寄存器方式定时器库函数版本使用 定时器计数功能计数器寄存器方式计数器库函数方式 原理分析 和其他 MCU 处理器一样&#xff0c;在 nRF52832 中定时器的功能是十分强大的。其内部包含了 5 个定 时器 TIMER 模块:TIMER0、TIMER…

windows下的vscode + opencv4.8.0(C++) 配置

1.添加环境变量 D:\mingw64\bin 2.安装vscode 3.下载opencv 4.8.0 4.程序引用第三方库(opencv为例) 打开CMakeLists.txt&#xff0c;引入头文件&#xff0c;使用include_directories 加入头文件所在目录。静态链接库link_directories # 头文件 include_directories(D:/ope…

搭建 Apple Mac M1 stm32 开发环境

近期想学习 stm32 开发,看了些书和视频,买了开发板。开发板到了后就迫不及待的的进行尝试。由于我目前使用的电脑是 Apple M1 Pro,目前用的比较多的是 windows + keil。我先是在 mac 使用虚拟机,安装 win 环境来使用,但是我分别使用了 VMware 和 parallels desktop ,keil…

数据分析---SQL(5)

目录 子查询单行子查询多行子查询视图(View)创建视图使用视图更新视图视图的优缺点存储过程存储过程的创建存储过程的参数存储过程的优缺点可能导致性能问题避免存储过程引入性能问题子查询 子查询是指在一个查询语句中嵌套另一个查询语句,内部的查询语句称为子查询,外部的…

@JsonFormat(pattern = “yyyy-MM-dd“) 年月日用法

需要只要年月日&#xff0c;后端数据库设计 start_date date NOT NULL COMMENT 时间,private Date startDate; 先说下发现问题&#xff1a; 1、列表显示年月日 00:00:00&#xff0c;查询结果用JsonFormat 2、新增/编辑如果不用value-format&#xff0c;传到后台的会晚8小时&…

API成网络攻击常见载体,如何确保API安全?

根据Imperva发布的《2024年API安全状况报告》&#xff0c;API成为网络攻击者的常见载体&#xff0c;这是因为大部分互联网流量&#xff08;71%&#xff09;都是API调用&#xff0c;API是访问敏感数据的直接途径。根据安全公司Fastly的一项调查显示&#xff0c;95%的企业在过去1…

STM32之HAL开发——串口配置(源码)

串口收发原理框图&#xff08;F1系列&#xff09; 注意&#xff1a;数据寄存器有俩个一个是收一个是发&#xff0c;但是在标准库或者HAL库中没有特别区分开来是俩个寄存器&#xff01; USART 初始化结构体详解 HAL 库函数对每个外设都建立了一个初始化结构体&#xff0c;比如 …

标题:深入理解 ES6 中的变量声明:let、var 和 const

在 ES6&#xff08;ECMAScript 6&#xff09;语法中&#xff0c;新增了let和const关键字来声明变量&#xff0c;这为 JavaScript 变量的作用域和声明方式带来了一些重要的改进。在这篇博客中&#xff0c;我们将深入探讨let、var和const之间的区别&#xff0c;并了解它们如何影响…

I/O(输入/输出流的概述)

文章目录 前言一、流的概述二、输入/输出流 1.字节/字符输入流2.字节/字符输出流总结 前言 在变量、数组和对象中储存的数据是暂时的&#xff0c;程序结束后它们就会丢失。如果想要永久地储存程序创建的数据&#xff0c;需要将其保存在磁盘文件中&#xff0c;这样就可以在程序中…