您的位置:首页 > 编程语言 > Java开发

JAVA竞赛刷题等源文件和输入输出

2020-03-06 16:42 1511 查看

现在好多oj都支持JAVA语言提交了,应该有很多人不论是从C语言转向java还是上手学的就是java。都有利用oj刷题的需要。这篇博客,就来分享下oj刷题的基础,源代码的提交和输入输出。

源代码

首先,我们编写java用的编译器是eclipse,不同于传统的C语言编译器以文件为单位,同一个文件夹下可以存在多个包含主函数的代码文件。java的程序是以工程为单位的,其下再分为包,包下再分出类。

而在java语言中所有的方法存在于类中。

所以,要想创建主方法,我们就需要先创建包含主方法的类。
具体的,这里有几个要求:

  1. 包含主方法的类必须是public修饰的公有类。
  2. 该类的类名必须为Main
  3. 主方法的定义必须为 public static void main(String[] args)

也就是说,在写一份程序之前,我们必须有这样一段代码:

public class Main{
public static void main(String[] args){

}
}

嗯。。。这样一道题才算是可以开始码了。

那么,说到创建类和主方法。我们就不得不面对另外一个问题,即:程序的命名和存储

在C语言中,我们可以直接将主函数写在引用的头文件下,保存成一个.c或者.cpp文件。这样一来,我就可以为程序命名为题目,复制内容就可以上交了。同时,不同的题目也可以存在不同的文件夹中,方便管理。

那么在java语言中,我们的存储方式就需要发生变化了。由于java是以工程为单位储存的。那么同名的类又不能重复定义,那么像C语言那样一个文件夹一个程序就不大可能了。当然,我们也不能一个工程写一道题,这样很奇怪的好吗!!

这里,我推荐一种储存方法。既然同一个同一个包中不能出现同名的类文件,那么我们就将不同的题放置在不同的包中,就像这样:

  • 工程文件 源文件夹 包1 类Main
  • 包2
      类Main
  • 包3
      类Main
  • 包4
      类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();
    .
    .
    .

    当然,这些只是最基本的用法,更高级的用法有待于笔者进一步学习和实践。

    那么本篇分享就写到这里。如有问题,欢迎评论指出。

    • 点赞
    • 收藏
    • 分享
    • 文章举报
    wayne_lee_lwc 发布了14 篇原创文章 · 获赞 2 · 访问量 325 私信 关注
  • 内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: