LoginSignup
17

More than 3 years have passed since last update.

posted at

VSCodeでJavaの入力待ち(Scanner)を使う話

はじめに

こいつをVSCodeで解いてみようと思ったのがことの発端。

問題文
高橋君はデータの加工が行いたいです。
整数 a,b,cと、文字列 s が与えられます。
整数 a+b+c と、文字列 s を並べて表示しなさい。

VSCodeでJavaを実行(デバッグ)

VSCodeでJavaを実行(デバッグ)するためにはDebugger for Javaという拡張機能が必要。

なんだけど、まあその辺の話は面倒なので割愛。ググれば出てくるので如何様にも。

通常はF5でデバッグを開始してくれるが、そのときに必要なのがlaunch.jsonという設定ファイル。
デフォルトではこんな感じの設定になってるはず。

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "java",
            "name": "Debug (Launch)",
            "request": "launch",
            "cwd": "${workspaceFolder}",
            "console": "internalConsole",
            "stopOnEntry": false,
            "mainClass": "",
            "args": ""
        }
    ]
}

が、この状態で実行するとVSCode下部の「デバッグコンソール」というところに出力される。
スクリーンショット (9).png

これだと出力は確認できるが、前述のAtCoderの解答例のようなScannerでの入力を受け付けることができない。

import java.util.*;
public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        // 整数の入力
        int a = sc.nextInt();
        // スペース区切りの整数の入力
        int b = sc.nextInt();
        int c = sc.nextInt();
        // 文字列の入力
        String s = sc.next();
        // 出力
        System.out.println((a+b+c) + " " + s);
    }
}

launch.jsonの書き換え

結論から言うと、必要なのはlaunch.json"console": "internalConsole"の書き換え。
こいつを"console": "integratedTerminal"に書き換えた上で実行すると、出力先が「デバッグコンソール」から「ターミナル」に変わり、以下のように入力待ちとなる。
スクリーンショット ().png
この状態でターミナルに任意の入力をすると、Scannerに読み込まれる。
スクリーンショット ()2.png

まとめ

しかしこの問題、main関数の引数として入力が与えられるもんだと思ったけど違うのね。
ニホンゴムズカシネー

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
17