JAVA竞赛刷题等源文件和输入输出
现在好多oj都支持JAVA语言提交了,应该有很多人不论是从C语言转向java还是上手学的就是java。都有利用oj刷题的需要。这篇博客,就来分享下oj刷题的基础,源代码的提交和输入输出。
源代码
首先,我们编写java用的编译器是eclipse,不同于传统的C语言编译器以文件为单位,同一个文件夹下可以存在多个包含主函数的代码文件。java的程序是以工程为单位的,其下再分为包,包下再分出类。
而在java语言中所有的方法存在于类中。
所以,要想创建主方法,我们就需要先创建包含主方法的类。
具体的,这里有几个要求:
- 包含主方法的类必须是public修饰的公有类。
- 该类的类名必须为Main
- 主方法的定义必须为 public static void main(String[] args)
也就是说,在写一份程序之前,我们必须有这样一段代码:
public class Main{ public static void main(String[] args){ } }
嗯。。。这样一道题才算是可以开始码了。
那么,说到创建类和主方法。我们就不得不面对另外一个问题,即:程序的命名和存储
在C语言中,我们可以直接将主函数写在引用的头文件下,保存成一个.c或者.cpp文件。这样一来,我就可以为程序命名为题目,复制内容就可以上交了。同时,不同的题目也可以存在不同的文件夹中,方便管理。
那么在java语言中,我们的存储方式就需要发生变化了。由于java是以工程为单位储存的。那么同名的类又不能重复定义,那么像C语言那样一个文件夹一个程序就不大可能了。当然,我们也不能一个工程写一道题,这样很奇怪的好吗!!
这里,我推荐一种储存方法。既然同一个同一个包中不能出现同名的类文件,那么我们就将不同的题放置在不同的包中,就像这样:
- 工程文件 源文件夹 包1 类Main
-
类Main
-
类Main
-
类Main
emm。。。不会插图片,这么搞还算形象。这样一来,每一个包就当做每一道题的文件夹,可以命不同的名称。
接着就是提交的问题了
提交的时候需要包含Main类文件中以下内容:
1.包含有主方法的Main方法
2.额外定义的其他类
3.所有引文件的import语句
注意:千万不要带上package语句!!
把他们复制下来,一并提交。
例如铺地毯这道可爱的题:
我的程序;
package P1003铺地毯; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in);int n = scan.nextInt(); int[][] a = new int[n + 1][4]; for(int i = 1;i <= n;i++) { for(int j = 0;j < 4;j++) { a[i][j] = scan.nextInt(); } } int x = scan.nextInt(); int y = scan.nextInt(); int ans = -1; for(int i = n;i >= 1;i--) { if(x >= a[i][0] && y >= a[i][1] && x <= a[i][0] + a[i][2] && y <= a[i][3] + a[i][1]) { ans = i; break; } } System.out.print(ans); } }
我提交的程序:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in);int n = scan.nextInt(); int[][] a = new int[n + 1][4]; for(int i = 1;i <= n;i++) { for(int j = 0;j < 4;j++) { a[i][j] = scan.nextInt(); } } int x = scan.nextInt(); int y = scan.nextInt(); int ans = -1; for(int i = n;i >= 1;i--) { if(x >= a[i][0] && y >= a[i][1] && x <= a[i][0] + a[i][2] && y <= a[i][3] + a[i][1]) { ans = i; break; } } System.out.print(ans); } }
注意到了吗,保留了import语句,但是删除了package语句。
说到这里了,就需要解决下面的问题了,那就是:
输入输出
输出
首先说输出,这个相对好解决。我们用这样两个语句进行输出;
- System.out.print();
- System.out.println();
用这两个语句输出,区别就是后者会自带换行且允许参数为空。具体格式神马的,就不多说了。
输入
接着说输入,相较于输出,输入就开始要用到java的面向对象操作了。
首先,需要实例化一个输入器对象Scanner,代码如下;
Scanner scan = new Scanner(System.in);
这句话的意思大概是:定义一个Scanner类型的对象叫做scan,它指向新创造出来的实例化Scanner对象。
好我们不管它具体是什么意思,这个不重要。重要的是,那个scan是我随便起的名字,读者可根据喜好命名。
此外,Scanner类需要引用java.util.Scanner文件,需要在开头处写上:
import java.util.Scanner;
由于输入对于一个oj题目的程序来说几乎是标配,所以,这个引用语句和实例化对象语句将会频繁出现在绝大多数程序中,前文代码就包含这两句话。
最后,就是这个输入对象的用法了。怎么输入呢,就是利用scan对象总包含的next一族方法。
那么对于每一种基本类型,都会有相对应的“next+类型”方法。特别的,字符串类型对应的就是next()方法本身。使用时,scan.next();就会返回对应类型的读入值。
例如:
int a = scan,nextInt(); double b = scan.nextDouble(); boolean c = scan.nextBoolean(); String d = scan.next(); . . .
当然,这些只是最基本的用法,更高级的用法有待于笔者进一步学习和实践。
那么本篇分享就写到这里。如有问题,欢迎评论指出。
- 点赞
- 收藏
- 分享
- 文章举报
- Java 的文件(读 写)输入输出
- [TOJ] 1179 Game of Connections -- catalan数,JAVA文件输入输出
- 疯狂JAVA讲义---第十五章:输入输出(上)流的处理和文件
- java IO之文件输入输出流
- java中的文件输入输出
- java中执行删除文件操作,要关闭输入输出流
- java中如何用使用输入输出流读写文件(事例)
- Java简单文件输入输出(Scanner,PrintWriter)
- java 文件输入输出(附源代码)
- Java 追加文件内容 输入输出流
- 详解Java的文件与目录管理以及输入输出相关操作
- java文件输入输出流
- Java学习笔记2——文件输入输出
- 算法竞赛入门经典 文件输入输出 重定向和fopen
- java之文件输入输出流之文件的拷贝
- 【Code】OI竞赛中程序文件输入输出格式
- java 文件输入输出(附源代码)
- java文件输入输出对象介绍
- java 文件输入输出流
- java文件输入输出