用BufferedReader快速输入有巨坑!!大佬们都是这么输入的

刷洛谷题单第二天,今天第一道题还是挺简单的,但是又被现实给了一级大逼兜子,做这题关键还是想熟悉Java的快速输入。还有做这道题很容易出现RE错误,下面总结了常见的RE错误导致情况(点击跳转下文)

我的上篇文章详细讲关于Java最快速输入输出法(关于StreamTokenizer和PrintWriter的应用)但是,StreamTokenizer有个不足就是,不能输入特殊符号,而今天做的洛谷这道题P2670 [NOIP2015 普及组] 扫雷游戏需要输入“*”和“?”,所以肯定得另外找过一个块输法了,这里就有另一个块输工具:BufferedReader。

BufferedReader实例化以及使用模板:

public class Main {
	// 用BufferedReader才能读特殊字符
	static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
	public static void main(String[] args) throws IOException {    // 注意这里一定要抛出异常
        // 输入数字:
		String[] dimensions = in.readLine().split(" ");  // 例如,输入2 3
        int n = Integer.parseInt(dimensions[0]);         // 2
        int m = Integer.parseInt(dimensions[1]);         // 3
        // ...代码
        // 输入字符串:
        String str = in.readLine();    
        // 循环输入字符串:
        String line;  
        while ((line = in.readLine()) != null) {  
          // 当你输入一个空行并按下回车时,程序将停止读取  
          if (line.isEmpty()) {  
              break;  
          }  
          System.out.println(line);  
       }  
       // ...代码
    }
}

什么就是BufferedReader常用的输入数字和字符串的方法,大家会发现,输入数字的时候要利用String类的split方法分割然后用Integer类转换才能得到,看上去有点麻烦,而BufferedReader中恰好有一个直接返回int型的方法:read();这不可以直接输入吗?哈哈,本人就是踩了这个坑,没了解方法内部具体实现情况,只看返回值来使用,导致一开始数据怎么都输入不进去。

BufferedReader中的read();方法确实是返回int型但是,它返回的是输入字符的ASCII码值。所以,想要输入数字,只能用上面实例中的代码,防止踩坑啊。

扫雷游戏题解:

思路:

我的思路是:定义一个int型的二维数组作为雷区结果集minefield (最后根据这个集合来输出),遍历ch字符二维数组,当遇到一个雷,首先给雷区数组minefield 的这个位置设置一个最小值(Integer自带的MIN_VALUE,是个很小的负数),然后扫描它的八个方向,满足没有造成数组越界情况时,给雷区数组周围的位子都自增1,这样结束之后,在结果集minefield 中,非雷区就会标记周围雷区情况,代码如下:

代码:


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;

public class Main {
	// 用BufferedReader才能读特殊字符
	static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
	static PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
	public static void main(String[] args) throws IOException {
		String[] dimensions = in.readLine().split(" ");  
        int n = Integer.parseInt(dimensions[0]); // 行数  
        int m = Integer.parseInt(dimensions[1]); // 列数  
        
		char[][] ch = new char[n][m];
		int[][] minefield  = new int[n][m];
		
		for(int i = 0; i < n; i++) {
			String str = in.readLine();
			ch[i] = str.toCharArray();
		}
		for(int i = 0; i < n; i++) {
			for(int j = 0; j < m; j++) {
				if(ch[i][j] == '*') {
					minefield [i][j] = Integer.MIN_VALUE;
                    // 注意是否越界条件,否则在洛谷提交中会出现RE错误
					if((i - 1) >= 0) {
						minefield [i - 1][j]++;
					}
					if((i - 1) >= 0 && (j + 1) <= m - 1) {
						minefield [i - 1][j + 1]++;
					}
					if((j + 1) <= m - 1) {
						minefield [i][j +1]++;
					}
					if((i + 1) <= n - 1 && (j + 1) <= m - 1) {
						minefield [i + 1][j + 1]++;
					}
					if((i + 1) <= n - 1) {
						minefield [i + 1][j]++;
					}
					if((i + 1) <= n - 1 && (j - 1) >= 0) {
						minefield [i + 1][j - 1]++;
					}
					if((j - 1) >= 0) {
						minefield [i][j - 1]++;
					}
					if((i - 1) >= 0 && (j - 1) >= 0) {
						minefield [i - 1][j - 1]++;
					}
				}
			}
		}
		for(int i = 0; i < n; i++) {
			for(int j = 0; j < m; j++) {
				if(minefield [i][j] < 0) {
					out.print('*');
				}else {
					out.print(minefield [i][j]);
				}
			}
			out.println();
		}
		out.close();
	}
}

运行结果图:

 这题难就难在八个方向的判断这里,很容易出现数组越界错误,当出现数组越界错误时,洛谷会出现一个叫“RE”的错误,RE:运行时错误。

RE错误常见的情况:

  1. 数组越界:尝试访问数组超出其定义范围的元素。
  2. 空指针解引用:试图通过空指针访问对象或内存。
  3. 除以零:在整数或浮点数除法中,除数为零。
  4. 栈溢出:通常由于无限递归或过大的局部变量/数组分配导致。
  5. 内存溢出:尝试分配超过可用内存的空间。
  6. 访问非法地址:试图读取或写入不属于程序的内存地址。
  7. 使用未初始化的变量:在某些情况下,使用未初始化的变量可能导致运行时错误。
  8. 浮点数异常:如除以零、溢出、下溢或非法的浮点操作。

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

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

相关文章

增存量市场大爆发!国产通信中间件「反攻」

梳理2023年智能驾驶的发展脉络可见&#xff0c;消费者对智能驾驶的认可度和接受度越来越高&#xff0c;带动高速NOA迈向了规模化普及新阶段&#xff0c;城市NOA初露锋芒。 从更长远的行业变革周期来看&#xff0c;智能驾驶的技术迭代还在继续&#xff0c;叠加电子电气架构的深…

软件测试人员常用的功能测试方法分享

功能测试就是对产品的各功能进行验证&#xff0c;根据功能测试用例&#xff0c;逐项测试&#xff0c;检查产品是否达到用户要求的功能。 常用的测试方法如下&#xff1a; 1. 页面链接检查 每一个链接是否都有对应的页面&#xff0c;并且页面之间切换正确。 2. 相关性检查 删除/…

基于springboot的房屋交易系统

文章目录 项目介绍主要功能截图&#xff1a;部分代码展示设计总结项目获取方式 &#x1f345; 作者主页&#xff1a;超级无敌暴龙战士塔塔开 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 &…

工业自动化步进电机用电机驱动芯片TMC5160

TMC5160 数据手册 TMC5160 集成了完整的运动控制功能、高质量的电流调节功能和强大的外部 MOSFET 驱动&#xff0c;涵盖了多种从电池供电的高效系统到 20 安培电机线圈电流的嵌入式应用。TMC5160 包含驱动电机所需的全部智能。配置 TMC5160 目 标 位 置 就 可 以 驱 动 电 机 。…

C++初阶:C/C++内存管理、new与delete详解

之前结束了类与对象&#xff1a;今天进行下面部分内容的学习 文章目录 1.C/C内存分布2.C语言中动态内存管理方式&#xff1a;malloc/calloc/realloc/free3.C动态内存管理方式3.1new/delete操作内置类型3.2new和delete操作自定义类型 4.operator new与operator delete函数5.new和…

题目:冒险者公会(蓝桥OJ 3611)

问题描述&#xff1a; 解题思路&#xff1a; 官方&#xff1a; 注意点&#xff1a; 在前期的排序操作&#xff0c;因为需要找到如样例所示的每轮最大&#xff0c;因此我们需要用0代替没有的委托&#xff08;即样例斜杠&#xff09;。如何用0代替&#xff1a;将村庄委托数量默认…

基于springboot校园交友网站源码和论文

随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&#xf…

ArcgisForJs快速入门

文章目录 0.引言1.前端代码编辑工具2.使用ArcgisForJs创建一个简单应用3.切片地图服务图层4.动态地图服务图层5.地图事件 0.引言 ArcGIS API for JavaScript是一款由Esri公司开发的用于创建WebGIS应用的JavaScript库。它允许开发者通过调用ArcGIS Server的REST API&#xff0c…

C++笔记之RTTI、RAII、MVC、MVVM、SOLID在C++中的表现

C++笔记之RTTI、RAII、MVC、MVVM、SOLID在C++中的表现 —— 杭州 2024-01-28 code review! 文章目录 C++笔记之RTTI、RAII、MVC、MVVM、SOLID在C++中的表现1.RTTI、RAII、MVC、MVVM、SOLID简述2.RAII (Resource Acquisition Is Initialization)3.RTTI (Run-Time Type Informat…

ABeam Insight | 大语言模型系列 (1) : 大语言模型概览

大语言模型系列 引入篇 ABeam Insight 自从图灵测试在20世纪50年代提出以来&#xff0c;人类一直不断探索机器如何掌握语言智能。语言本质上是一个由语法规则支配的错综复杂的人类表达系统。 近年来&#xff0c;具备与人对话互动、回答问题、协助创作等能力的ChatGPT等大语…

江科大stm32学习笔记6——GPIO输入准备

一、按键消抖 由于按键内部使用的是机械式弹簧片&#xff0c;所以在按下和松开时会产生5~10ms的抖动&#xff0c;需要通过代码来进行消抖。 二、滤波电容 在电路中&#xff0c;如果见到一端接在电路中&#xff0c;一端接地的电容&#xff0c;则可以考虑它的作用为滤波电容&am…

python爬虫实战——获取酷我音乐数据

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 开发环境: 版 本&#xff1a; python 3.8 编辑器&#xff1a;pycharm 2022.3.2 模块使用: requests >>> pip install requests 如何安装python第三方模块: win R 输入 cmd 点击确定, 输入安装命令 pip install…

职业身份来认同自己对吗?

人们常常以自己的职业身份来认同自己。这是一个巨大的错误。 你的职业身份只是一个外壳&#xff1b;它不能定义你是一个人。你可以期待你的职业媒介会随着时间而改变&#xff0c;但是你传达的信息会应该更加稳定。你的信息就是回答你是谁&#xff0c;你应该通过三十几年的工作…

linux中常用的命令

一&#xff1a;tree命令 &#xff08;码字不易&#xff0c;关注一下吧&#xff0c;w~~w) 以树状形式查看指定目录内容。 tree --树状显示当前目录下的文件信息。 tree 目录 --树状显示指定目录下的文件信息。 注意&#xff1a; tree只能查看目录内容&#xff0c;不能…

【Axure高保真原型】随机抽取案例

今天和大家分享随机抽取点餐案例的原型模板&#xff0c;包括2种效果&#xff0c;第一种是手动暂停效果&#xff0c;点击开始后随机抽取食物&#xff0c;手动点击暂停按钮后停止&#xff1b;第二种是自动暂停效果&#xff0c;点击开始按钮后随机抽取食物&#xff0c;并且开始倒计…

webassembly003 whisper.cpp的python绑定实现+Cython+Setuptools的GUI程序

CODE python端的绑定和本文一样&#xff0c;还需要将cdef char* LANGUAGE b’en’改为中文zh&#xff08;也可以在函数中配置一个参数修改这个值&#xff09;。ps:本来想尝试cdef whisper_context* whisper_init_from_file_with_params_no_state(char*, whisper_full_params)…

Gitlab7.14 中文版安装教程

Gitlab7.14 中文版安装教程 注&#xff1a; 本教程由羞涩梦整理同步发布&#xff0c;本人技术分享站点&#xff1a;blog.hukanfa.com转发本文请备注原文链接&#xff0c;本文内容整理日期&#xff1a;2024-01-28csdn 博客名称&#xff1a;五维空间-影子&#xff0c;欢迎关注 …

部署LNMP、Nginx+FastCGI、Nginx地址重写语法,地址重写应用案例

1 案例1&#xff1a;部署LNMP环境 1.1 问题 安装部署LNMP环境实现动态网站解析 静态网站 在不同环境下访问&#xff0c;网站内容不会变化 动态网站 在不同环境下访问&#xff0c;网站内容有可能发生变化 安装部署Nginx、MariaDB、PHP、PHP-FPM&#xff1b;启动Nginx、Mari…

STM32标准库——(6)TIM定时中断

1.TIM简介 TIM&#xff08;Timer&#xff09;定时器定时器可以对输入的时钟进行计数&#xff0c;并在计数值达到设定值时触发中断16位计数器、预分频器、自动重装寄存器的时基单元&#xff0c;在72MHz计数时钟下可以实现最大59.65s的定时不仅具备基本的定时中断功能&#xff0…

LVGL部件

一.标签部件 1.如何创建标签部件以及设置文本 ![2024-01-28T09:54:08.png][3] void my_lvgl(void) {lv_obj_t *lablelv_label_create(lv_scr_act()); //创建一个标签lv_label_set_text(lable,"hello"); //普通更改文字lv_label_set_text_fmt(lab…