如何从扫描程序

时间:2015-09-18 11:21:59

标签: java

语言:Java。

目的: 对于从输入读取的任何索引,布尔数组gridA []应为true(即如果输入为“init_start 2 4 5 init_end”,则gridA []索引2,4和5应为真)。我设法开始工作但我有两个问题:

输入 init_start int int int int(...)int init_end 例如:init_start 2 6 12 init_end

问题: 输入中超出(实例变量)的任何整数int L(确定数组的索引长度)应该被忽略,以防止来自Array gridA []域外的整数产生影响。 使用if(scanner.nextInt!= L){}似乎不起作用。

我还需要这个方法,或者当输入以“init_start”开头时启动方法的主体,当输入以“init_end”结束时停止。 如何编写代码以便它可以从同一个输入中读取字符串和整数?

我打算这样做 if(scanner.exe = =“init_start”)后跟 a = scanner.NextInt;我怀疑,这不起作用。

尝试解决: 谷歌搜索后我尝试将String initialInputStart放入扫描仪:  localScanner(initialInputStart); 但是我没能做到这一点。我发现的其他信息建议我关闭并重新打开扫描仪,但我需要从一行输入读取信息,所以我怀疑这会有所帮助。

代码:

java.util.Arrays.fill(gridA,false); 
java.util.Arrays.fill(gridB,false);
String initialInput;
String initialInputStart;
int a;
int i;//only for testing
i = 0;//only for testing

System.out.println("type integers"); //only for testing
while( scanner.hasNextInt() && i<5){ //I can't find a way to make loop stop without missing input so I'm using i temporarily
  a = scanner.nextInt();
  gridA[a] = true;
  System.out.print(a);
  System.out.print(gridA[a]+" ");
  i++;
}//end while    

2 个答案:

答案 0 :(得分:1)

我写了一个小程序,它几乎完成你所描述的目标;我逐行阅读并将每个分成标记我进一步处理。令牌描述数据意味着什么/我们处于什么状态。实际数据在default:中的switch(token)案例中进行解析,并从州到州的行为中进行分支 (这只是在这里可见,因为我们只有两个状态:“init”和“not init”,在关键字旁边):

public static void main(String[] args) {
    int L = 13; // not sure if this is needed
    boolean[] gridA = new boolean[L];

    Reader source;
    /**
     * from file:
     *     source = new FileReader("grid.csv");
     */
    /**
     * from classpath resource:
     *     source = new InputStreamReader(MyClass.class.getResourceAsStream("grid.csv"));
     */
    /**
     * from string:
     *     source = new StringReader("init_start 2 6 12 init_end");
     */
    /**
     * from std-in:
     *     source = new InputStreamReader(System.in);
     */
    try(BufferedReader stream = new BufferedReader(source)) {
        boolean init = false;

        // loop
        input_loop:
        while(true) {
            // read next line
            String line = stream.readLine();
            if(line == null) {
                // end of stream reached
                break;
            }
            if(line.trim().isEmpty()) {
                // ignore empty lines
                continue;
            }

            String[] tokens = line.split(" ");
            for (String token : tokens) {
                switch (token) {
                    // evaluate keywords
                    case "init_start":
                        init = true;
                        break;
                    case "init_end":
                        init = false;
                        break;
                    // for input from console
                    case "exit":
                        break input_loop;
                    default:
                    // parse input, based on state (expand "init" to an enum for more states)
                        if(init) {
                            // read init input
                            int index = Integer.parseInt(token);
                            if(index >= 0 && index < gridA.length) {
                                gridA[index] = true;
                            } else {
                                throw new RuntimeException("illegal grid index: " + index);
                            }
                        } else {
                            // read undefined input
                            throw new RuntimeException("unrecognized token: " + token);
                        }
                        break;
                }
            }

        }
    } catch(IOException ex) {
        throw new RuntimeException("an i/o exception has occurred", ex);
    }

    System.out.println(Arrays.toString(gridA));
}

答案 1 :(得分:0)

使用此实现:

public static void main(String args[]){
    try{
        Scanner in = new Scanner(System.in);
        System.out.println("Enter a line");
        String dat = in.readLine();
        System.out.println(dat);
    }
    catch(IOException e){
        System.out.println("IO ERROR !!!");
        System.exit(-1);
    }
}