【发布时间】:2015-12-24 03:23:54
【问题描述】:
我现在遇到了这个问题,正在解决一个问题(java 实践)。问题是要确保所提供输入的括号顺序正确(此链接中的更多信息:http://www.codeabbey.com/index/task_view/matching-brackets)。我面临的问题是我的 bufferedReader 不会读取我的最后一行输入。它进入最后一个循环,但似乎在阅读之前“暂停”。我可以让它工作的唯一方法是如果我按下回车键,那么程序最后一次继续通过 input.readLine() 并打印出我的字符串。这是我的代码:
public static void main(String[] args)
{
try
{
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
System.out.println("input data:");
//First line is read to take in the number of lines for input will follow
int data = Integer.parseInt(input.readLine());
int i = 0;
while(i < data)
{
//temp string builder to hold the wanted characters
StringBuilder stringy = new StringBuilder();
String line = input.readLine();
//temp string builder holding the entire line
StringBuilder sb = new StringBuilder(line);
for(int j = 0; j < sb.length(); j++)
{
//loops through string builder & adds the wanted characters to stringy
switch(sb.charAt(j)){
case '(' : stringy.append(sb.charAt(j));
break;
case ')' : stringy.append(sb.charAt(j));
break;
case ']' : stringy.append(sb.charAt(j));
break;
case '[' : stringy.append(sb.charAt(j));
break;
case '{' : stringy.append(sb.charAt(j));
break;
case '}' : stringy.append(sb.charAt(j));
break;
}
}
System.out.println(stringy);
i++;
}
}catch(IOException x)
{
x.printStackTrace();
}
}
对不起,如果我不够清楚。我试图在网上阅读这个,但人们似乎没有这个特定的问题。我不确定如何,但似乎在我的最后一行输入之前添加了额外的行或其他内容。感谢您的帮助,我真的很感激。
编辑: 抱歉,我意识到我没有为程序提供任何输入数据。这里是:
4
(a+[b*c]-{d/3})
(a + [b * c) - 17]
((a * x) + [b] * y) + c
auf(zlo)men [gy<psy>] four{s}
只需将上述内容复制并粘贴到您的程序中,您就会看到问题
【问题讨论】:
-
程序似乎运行正常。例如,如果您在第一个
readLine()(数据)中输入5,那么它将询问您 5 个新值来匹配括号。每次,您都必须按一次“输入”来提供这 5 个输入。那么,有什么问题呢? -
它工作正常检查这个ideone.com/uo8gN3
-
对不起,我没有提供我一直使用的输入信息。我认为这可能与将输入复制并粘贴到服务器区域有关。
-
我意识到你最终得到了所有的输入,我想我只是不明白为什么我需要在最后一行输入时按 Enter,即使它显示了我想要的前三行。 while 循环似乎在 bufferedReader 读取输入的最后一行之前或之前暂停。有点不同的问题,但这真的让我很烦恼。
-
你的意思是你必须按Enter键加时?在我的上,您只需按一次即可进行最后一次输入。您是在 IDE 中运行,还是在命令行中运行?
标签: java stringbuilder