📜  具有快速 I/O 和代码段的 VS Code 中的Java竞争性编程设置

📅  最后修改于: 2022-05-13 01:55:28.787000             🧑  作者: Mango

具有快速 I/O 和代码段的 VS Code 中的Java竞争性编程设置

尽管 C++ 是竞争性编程领域中的主导语言,但仍有相当一部分用户继续使用Java,就像在开发领域中看到的那样,同时可以尽可能快地使用竞争性编程在竞争激烈的世界中几乎看不到动态中最慢的Python来回切换。因此,对于只使用Java编程并希望使用Java进行有竞争力的编程的用户来说,这里是如何在本地计算机上设置环境的方法。作为编辑器,我们将使用迄今为止最流行的代码编辑器之一,即 VS Code。

程序:

依次按照标准步骤进行设置。有以下4个步骤:

  1. 安装 VS Code 并设置 JDK(如果未安装)。让我们继续。
  2. 为快速 I/O 设置一个片段。
  3. 设置您的输入和输出文件。
  4. 对屏幕进行分区。

现在,我们将从一开始就与视觉辅助工具一起深入挖掘每一步,以便在它们持续时间更长时获得绝对清晰的理解。

解释:



第 1 步:安装 VS Code 并设置 JDK

  • 从 VS Code 官方网站安装 VS Code
  • 此后,请安装/更新最新版本的 JDK。 (Java开发工具包)

步骤 2:为快速 I/O 设置一个片段。

片段对于快速插入大量您经常使用的预先编写的代码非常有用。由于输入和输出代码将用于每个竞争性编程问题,因此片段对我们的事业非常有帮助。

要设置代码段,请遵循以下步骤:

2.1打开 VS Code 并转到File -> Preferences -> User Snippets。

2.2从下面的下拉框中选择Java.json ,如下所示。



2.3你会发现 VS Code 已经提供了一个关于如何创建自定义代码片段的粗略指南。文本应如下所示:

{

Place your snippets for java here. Each snippet is defined 
under a snippet name and has a prefix, body and 
description. 

The prefix is what is used to trigger the snippet and
the body will be expanded and inserted. Possible variables are:

$1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders.
Placeholders with the 
same ids are connected.

Illustration:


"Print to console": {
"prefix": "log",
"body": [
"console.log('$1');",
"$2"
],
"description": "Log output to console"

}
}

2.4在给定的注释下方和花括号内,粘贴以下代码:

"Template for CP" : {
        "prefix": "template",
        "body":[
            "import java.util.*;",
            "import java.io.*;",
            
            "public class Main {",
                "$LINE_COMMENT For fast input output",
                "static class FastReader {",
                    "BufferedReader br;",
                    "StringTokenizer st;",
             
                    "public FastReader()",
                    "{ try {br = new BufferedReader(",
                        "new FileReader(\"input.txt\"));",
                        "PrintStream out = new PrintStream(new FileOutputStream(\"output.txt\"));",
                        "System.setOut(out);}",
                    "catch(Exception e) { br = new BufferedReader(new InputStreamReader(System.in));}",
                    "}",
             
                    "String next()",
                    "{",
                        "while (st == null || !st.hasMoreElements()) {",
                            "try {st = new StringTokenizer(br.readLine());}",
                            "catch (IOException e) {",
                                "e.printStackTrace();}",
                        "}",
                        "return st.nextToken();",
                    "}",
             
                    "int nextInt() { return Integer.parseInt(next()); }",         
                    "long nextLong() { return Long.parseLong(next()); }",         
                    "double nextDouble() {return Double.parseDouble(next()); }",
             
                    "String nextLine()",
                    "{",
                        "String str = \"\";",
                        "try {",
                        "str = br.readLine();",
                        "}",
                        "catch (IOException e) {",
                            "e.printStackTrace();",
                        "}",
                        "return str;",
                    "}",
                "}",
                "$LINE_COMMENT end of fast i/o code",
            
                
                "public static void main(String[] args) {",
                    "FastReader reader = new FastReader();",
                    "$0",
            "}",
        "}"
        ],
        "description": "template for cp in java"
    },

    "For loop":{
        "prefix" : "forl",
        "body" : [
            "for(int i = 0; i < $0; i++)"
        ]
    }                        
  • CP 的模板是代码段的名称。它用于识别代码完成期间出现的代码段(标记为红色)。

  • template是用于触发代码完成的前缀(标记为绿色)。
  • body是代码片段所在的位置。这里需要注意的一些要点是:
    • Fast I/O 代码是对 Competitive Programming 中的 Fast I/O in Java文中的 FastReader 代码的轻微修改。
    • 修改在于 FastReader 类的构造函数中的try/catch 块。它用于连接到我们本地计算机上的输入和输出文件。我们将在本文后面介绍设置输入和输出文件的过程。
    • main函数中的$0用作光标的占位符。代码片段将自身粘贴到您的Java文件后,光标将自动放置在 $0 标记处。
    • 可以在代码段中添加评论,并将关键字$LINE_COMMENT放在评论之前。
    • 特殊字符,(如引号)必须使用反斜杠 ( \ ) 进行转义;
    • 需要注意的是,代码段主体中的每一行都必须单独放在引号中,并且每行之后必须放置一个逗号,如下图所示。

  • description用于留下关于片段的简短注释以供将来参考。

第 3 步:设置输入和输出文件。

在比赛期间,粘贴大输入并从文件中读取相应的输出比在终端窗口中手动输入输入更容易。因此,我们将设置一个输入和输出文件。采取的步骤如下:

  • 创建一个单独的文件夹并在其中创建两个文本文件:“ input.txt”和“ output.txt ”。您的Java代码文件必须位于同一文件夹中。这应该足以解决问题。如果要将输入、输出和Java文件放在不同的目录中,请将代码中的文件路径放在如下所示的位置。

例子

// This code snippet is a part of the FastReader class
// as illustrated above

public FastReader() {

  // The try block runs when both input and output files
  // are present in the specified directory.
  try {

    // We modify the input stream to take input
    //from the  input.txt file
    br = new BufferedReader(new FileReader("input.txt"));

    // We modify the output stream to print the output
    // in the output.txt file
    PrintStream out = new
    PrintStream(new FileOutputStream("output.txt"));

    System.setOut(out);
  }

  // In case the input or the output file is not found,
  // a FileNotFoundException is thrown and we enter the
  // catch block.

  // Catch block to handle th exception
  catch (Exception e) {

    // Since an input file is not present, we take input
    // from the usual system input stream.
    br = new BufferedReader(
      new InputStreamReader(System.in));
  }
}

上述代码段的解释如下:

这里基本上我们首先要寻找一个输入和输出文件,它应该存在于我们的本地设备上,然后在那里输入和输出。但是,如果没有找到输入输出文本文件,就像代码提交给在线判断的情况一样,程序会从标准输入流中读取输入并在标准输出流中输出。

第 3 步(替代方法):设置您的输入和输出文件。

在比赛期间,粘贴大输入并从文件中读取相应的输出比在终端窗口中手动输入输入更容易。因此,我们将设置一个输入和输出文件。采取的步骤如下:

  • 搜索并安装名为Code Builder的扩展。
  • 使用Build with IO Command 或使用CTRL+ALT+K运行代码
  • 如果未设置,它将在运行时询问您的输入和输出文件,否则它将使用先前选择的文件。
  • 确保输入和输出文件与源文件位于同一驱动器中。
  • 那么您将不必修改输入流和输出流。
  • 片段修改将如下完成

例子

// This code snippet is a part of the FastReader class
// as illustrated above

public FastReader() {

  // The try block runs when both input and output files
  // are present in the specified directory.
  try {

    //The Extension will PIPE the Input and Output Stream to Files at Runtime
    br = new BufferedReader(System.in);
  }

  // In case there is an error input or the output file is not found,
  // Exception is thrown and we enter the
  // catch block.

  // Catch block to handle the exception
  catch (Exception e) {

    // Printing the Stack Trace of Exception
    e.printStackTrace();
  }
}

第 4 步:对屏幕进行分区

现在,所有必要的文件都已创建,让我们设置我们的编码环境:

  • 打开 VS Code 并打开包含输入、输出和Java程序文件的文件夹。为此,请转到文件-> 打开文件夹并选择您的文件夹。
  • 同时打开所有三个文件,使它们位于不同的选项卡中。
  • 转到View-> Editor Layout-> Two Rows Right

  • 根据您的方便,将input.txt拖到右上角的窗格中,将output.txt拖到右下角的窗格中,反之亦然。将您的Java文件保留在左窗格中,以提供最大的屏幕覆盖率。通过拖动每个窗格分区的边框来调整窗格的大小。
  • 最终产品应如下所示: