在将输入设置为在while循环中输入后,如何重设字符形式的输入。经过while循环后,它应该从头开始。 例如
char text = In.read();
假设我输入了asdf
while(text != '\n' ) {
text = In.read();
}
//here is text = enter
但是我希望它再次成为asdf中的'a'。
这是我到目前为止所得到的
System.out.print("Please enter your text ");
char text = In.read();
// some other code here
//...
for (int i = 0; i < textcount.length ; i++)
{
j = 0;
while(text != '\n' )
{
int a = Character.getNumericValue(textcount[i]);
int b = Character.getNumericValue(text);
if(a == b)
{
j++;
charCounts[i] = j;
}
text = In.read();
}
}
答案 0 :(得分:0)
这取决于In
是哪种流。
如果它是ByteArrayInputStream
或类似名称,则可以调用reset()
重置到先前的“标记”位置。对于ByteArrayInputStream
,该位置默认为流的开头;参见javadoc。
如果它是FileInputStream
,则可以使用mark
和reset
,尽管它可能取决于操作系统和创建流的方式。 (javadoc不会说一种或另一种方式。)
在您的情况下,我怀疑您将从FileInputStream
中读取,该文件包装了 不可重绕的管道或设备文件。
如果它是SocketInputStream
,则mark
和reset
不太可能起作用。无法倒退来自远程服务器的流。网络传输协议(和服务器)不支持这种功能。
如果它是BufferedInputStream
,则mark
和reset
可能有效,具体取决于缓冲区的大小。阅读javadoc,以了解缓冲区大小与标记/重置之间的关系。
那么您的解决方案是什么?
标记/重置可能不适用于In
。
您可以将In
包裹在具有足够大缓冲区的BufferedInputStream
中,尽管预测需要多大的缓冲区还是有问题的(至少在理论上是这样!)
最好的解决方案可能是更改代码,以使您无需重新读取输入。例如:
BufferedReader::readLine
或Scanner::nextLine
一次从用户行读取用户的输入。答案 1 :(得分:0)
好,我修复了它。我只是更改它,以便while循环位于for循环之前。 现在它可以正常工作而无需重设任何内容。