语言: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
答案 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);
}
}