JAVA算法竞赛输入输出专题[通俗易懂]

JAVA算法竞赛输入输出专题[通俗易懂]小编由于报名了蓝桥杯Java组,所以日常做题从使用C/C++转变成使用Java。在转变的过程中,肯定会遇到很多大大小小的输入输出问题。小编打算总结下来,当做自己学习的材料,也分享给感兴趣的朋友。

大家好,又见面了,我是你们的朋友全栈君。

2020.2.23更新,增加了数组模块


前言

小编由于报名了蓝桥杯Java组,所以日常做题从使用C/C++转变成使用Java。在转变的过程中,肯定会遇到很多大大小小的输入输出问题。小编打算总结下来,当做自己学习的材料,也分享给感兴趣的朋友。

文件名问题

在比赛提交的代码中,主类必须以public class Main来命名,而且不能带package语句否则会报出编译错误。

//去掉public或者不使用Main作为类名都会gg,亲测有效orz

基本的输入和输出

竞赛入门最经典的问题,莫过于A+B Problem,如果连最基本的输入输出都做不到,学了再多的算法也用不出来。

import java.util.*;
public class Main { 
   

	public static void main(String[] args) { 
   
		Scanner cin = new Scanner(System.in);
		int a, b;
		while (cin.hasNext()) { 
   
			a = cin.nextInt();
			b = cin.nextInt();
			System.out.println(a + b);
		}
	}
}

上面代码展示了最基本的输入输出框架,输入类Scanner包含在java.util类包中,首先应该把它导入。

import java.util.*;

由于java的输入需要预先创建输入类对象,所以我们一般习惯在main函数的第一句先创建这个Scanner类对象,对象命名为cin算是表达对C/C++的热爱和怀念吧hhh
如果题目数据量比较大的话可以选择第二种初始化方法,运行效率会高上一些。

Scanner cin = new Scanner(System.in);
//or
Scanner cin = new Scanner(new BufferedInputStream(System.in));

由于题目说明“输入包括多组数据,到文件结尾为止”,类比C/C++的格式,我们很容易理解以下的这段java代码

while (cin.hasNext())  //当输入流中还有数据时
{ 
   
    a = cin.nextInt();
	b = cin.nextInt();
}

1.基本数据类型

这些类型在C/C++中基本上已经用烂了,一般过目一遍就会了。

int n = cin.nextInt();//读入一个整数
double d = cin.nextDouble();//读入一个双精度浮点数
long l = cin.nextLong();//读入一个长整型数

需要注意一点:由于Java的main方法是static类型,所以定义全局变量或者方法的时候就需要加上static关键字!

2.数组

关于数组的创建,Java和C/C++也有所不同,它在创建时需要使用new关键字来为其分配存储空间,不过也不会非常麻烦。

int arr[] = new int[Size];
//or
int []arr = new int[Size];

对于二维数组的初始化问题,可以看看我写的另一篇文章:Java 二维数组的初始化

3.字符&字符串

Scanner类中并没有提供单个字符char类型的读入方法,但是我们可以先调用next()方法读取只包含一个字符的字符串,然后用charAt(0)返回0号索引处的字符,即可得到读取到单个字符。

char ch = cin.next().charAt(0);

对于字符串,java中已经封装好了字符串String类,我们也可以用char数组在进行字符串存储。

String str1 = next(); //相当于C/C++中的scanf("%s",str);或cin>>str;
String str2 = nextLine();//相当于C/C++中的gets(str2);或者getline(cin,str2);

char s1[] = cin.next().toCharArray();//调用toCharArray()方法将其转化为char类型数组
char s2[] = cin.nextLine().toCharArray();//类比理解

但是要注意的是,我们不能像C++那样直接用数组下标去访问String类对象中的某号字符。 我们通常利用charAt(int index)方法来访问String类对象中的某号字符,或者不需要调用String类的其他方法的情况下,直接采用char类型数组来存储字符串。

4.输出

日常基本的输出:

System.out.println(); //相当于C++中的cout<<endl;
System.out.print();   //相当于C++中的cout<<"";

输出到文件中:
以下情况可能会用到输出到文件中

  • 当数据量过于庞大,java的控制台都无法输出,需要输出到文件中。
  • 用暴力法打表,需要按格式先输入到文件中。
try { 
   
	BufferedWriter bw = new BufferedWriter(new FileWriter(new File("E://result.txt")));
	bw.write(str);//str表示写入文件的内容
	bw.flush();//立刻将缓存区的数据写入数据流
	bw.close();//将BufferedWriter流关闭
} catch (Exception e) { 
   
	e.printStackTrace();
}

File(string pathname); 用于初始化文件类,pathname表示文件的路径
FileWriter(File file); 用于初始化文件写入类FileWriter,file表示文件类对象

未完待续…

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/141521.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Pytorch(五)入门:DataLoader 和 Dataset

    Pytorch(五)入门:DataLoader 和 DatasetDataLoader和Dataset构建模型的基本方法,我们了解了。接下来,我们就要弄明白怎么对数据进行预处理,然后加载数据,我们以前手动加载数据的方式,在数据量小的时候,并没有太大问题,但是到了大数据量,我们需要使用shuffle,分割成mini-batch等操作的时候,我们可以使用PyTorch的API快速地完成这些操作。Dataset是一个包装类,用来将数据包装为Datas…

    2022年6月14日
    29
  • extremedb是开源的吗_最简单的数据库开发软件

    extremedb是开源的吗_最简单的数据库开发软件最近我接触了嵌入式数据库eXtremeDB,由于这方面资料很少,网上的参考资料都大同小异,只靠着软件本身提供的参考文档进行开发,所以刚开始开发有些困难。故将基本的用法整理一下。关于eXtremeDB的特性,这里就不阐述了,直接从开发开始。下面以简单的模板为例进行阐述。1.构建.mco文件打开记事本,然后另存为XX.mco后缀文件。.mco文件里面需要定义数据库所需的字段类型,名称等,…

    2022年10月14日
    3
  • 分布式计算概述_分布式计算与处理

    分布式计算概述_分布式计算与处理**分布式计算是当前计算机领域常见的名词,那么到底什么是分布式,什么又是分布式计算呢?今天和大家共同研究一下这个话题。**分布式计算的概念一个分布式系统是由若干通过网络互联的计算机组成的软硬件系统,且这些计算机互相配合以完成一个共同目标(往往这个共同目标称为“项目”)分布式计算的优缺点优点:1.超大规模2.虚拟化3.高可靠性4.通用性5.高伸缩性6.按需服务7….

    2025年8月7日
    1
  • webstorm的永久激活码2021[在线序列号][通俗易懂]

    webstorm的永久激活码2021[在线序列号],https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月20日
    311
  • linux抓取snmp trap告警命令,linux snmptrap的发送与接收

    linux抓取snmp trap告警命令,linux snmptrap的发送与接收linuxsnmptrap的发送与接收由于需要管理服务器的一些参数,比如CPU使用率,IOwait之类的指标,管理方通过snmpwalk进行五分钟一次对受管服务器的轮询。此类指标为业务指标,是必须了解的一些参数,另需要有告警指标信息。但由于告警信息一般是由受管服务器进行主动告警,这时候就不能通过管理方主动使用snmpwalk来进行,而是由受管服务器通过snmptrap进行。以下是对双方进行snm…

    2022年8月20日
    17
  • SpringBoot和Spring到底有没有本质的不同?

    SpringBoot和Spring到底有没有本质的不同?现在的Spring相关开发都是基于SpringBoot的。最后在打包时可以把所有依赖的jar包都打进去,构成一个独立的可执行的jar包。如下图:使用java-jar命令就可以运行这个独…

    2022年5月10日
    34

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号