必须输入两次扫描器读取它



所以在这段代码中,在方法"Run"中的"Run"类下,扫描器似乎不想从第一次尝试中接受输入,只有在第二行才接受输入。我说第二行是因为我输入input然后按回车两次,然后在第三行输入input,它会读取第二行,在这种情况下就是什么都没有。

我试过BufferedReader,结果相同,所以我相信我做了一些愚蠢的事情,忽略了一些东西。

import java.util.Scanner;
import java.util.ArrayList;
import java.util.Timer;
import java.util.TimerTask;
import java.io.*;
class Global {
    public static int stop = -1;
}
public class DataSort {
    public static void main(String[] args){
        Timer timer = new Timer();
        Direct swit = new Direct();
        Run mprog = new Run();
        Help hlp = new Help();
        String newline = System.getProperty("line.separator");
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        Scanner console = new Scanner(System.in);
        System.out.println(newline);
        System.out.println("Welcome to Data Sort! This Program is designed to sort information about targets discoverd by UAV and place the data in a table." + newline);
        System.out.print("For help, press any key. To continue, please wait. ");
        timer.schedule(swit, 3000);
        try {
            Global.stop = in.read();
        } 
        catch(IOException e) {
            e.printStackTrace();
        }
        try {
            in.close();
        }
        catch(IOException e) {
            e.printStackTrace();
        }
    }
}
class Direct extends TimerTask {
    public void run() {
        Run mprog = new Run();
        Help hlp = new Help();
        if(Global.stop != -1){
            System.out.println("Help");
            hlp.run();
        }
        if(Global.stop == -1) {
            System.out.println("Main");
            mprog.run();
        }
    }
}

class Help {
    public static void run() {
        String newline = System.getProperty("line.separator");
        System.out.print(newline);
        System.out.println("Entering Help Mode!" + newline);
        System.out.println("Entered Help Class");
        //String help = console.nextLine();
    }
}
class Run {
    public static void run() {
        /*EnterAll eall = new EnterAll();
        EnterCoords ecoords = new EnterCoords();
        EnterRelation erelat = new EnterRelation();
        EnterColor ecolor = new EnterColor();
        EnterShape eshape = new EnterShape();
        Coordinates coords = new Coordinates();
        Relation relat = new Relation();
        Color color = new Color();
        Shape shape = new Shape();
        List list = new List();
        Save save = new Save();
        SaveAs saveas = new SaveAs();*/
        String newline = System.getProperty("line.separator");
        Scanner console = new Scanner(System.in);
        System.out.print(newline);
        System.out.println("Initializing Main Program." + newline);
        System.out.println("************************** MAIN MENU *************************" + newline);
        System.out.println("Enter Coords t Enter Relat t Enter Color t Enter Shape"+newline);
        System.out.println("Coordinates t Relation t Color t t Shape" + newline);
        System.out.println("Help t t List t t Save t t Save As" + newline);
        System.out.println("**************************************************************" + newline);
        System.out.print("Enter your selection or type All to enter lines consecutively: ");
        String raw = console.nextLine();
        System.out.println(raw);
        String select = errorCheck(raw);
        if (select.equals("All")){
        }
        if (select.equals("Enter Coords")){
        }
        if (select.equals("Enter Relat")){
        }
        if (select.equals("Enter Color")){
        }
        if (select.equals("Enter Shape")){
        }
        if (select.equals("Coordinates")){
        }
        if (select.equals("Relation")){
        }
        if (select.equals("Color")){
        }
        if (select.equals("Shape")){
        }
        if (select.equals("Help")){
        }
        if (select.equals("List")){
        }
        if (select.equals("Save")){
        }
        if (select.equals("Save As")){
        }
    }
    private static String errorCheck(String raw) {
        String select = raw;
        return select;
    }
}

问题出在

public class DataSort {...... Global.stop = in.read(); ......} 
因为在

。read用于读取整数输入。它不读取行结束符。这就是为什么当你输入选择字符串并按回车键后,它就变得毫无头绪了。

问候,拉维

@Sean,这是你的解决方案

注释掉下面的行

public class DataSort
{
.
.
.
//BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
//Scanner console = new Scanner(System.in);
.
.
.
//Global.stop = in.read();
.
.
}

全球。Stop = in.read(),从相同的输入读取缓冲区中读取(可能在相同的类或其他地方),并根据需要解析字符串。不要再创建一个输入读缓冲区。

问候,拉维

最新更新