我正在尝试创建一个程序来计算用户输入的单词中的字符数,而我不想要使用.length
功能。
我的问题是,无论我做什么,程序都会给出答案,表明比我输入的更多 。
这是我的代码:
import java.io.IOException;
import java.io.InputStreamReader;
public class count {
public static void main(String args[]) throws IOException
{
InputStreamReader cin = null;
int counter=0;
try {
cin = new InputStreamReader(System.in);
System.out.println("Enter text: ");
char c;
do {
c = (char) cin.read();
System.out.print(c);
counter++;
} while(c != '\n');
} finally {
counter -=1;
System.out.println("Number of characters: " + counter);
if (cin != null) {
cin.close();
}
}
}
};
答案 0 :(得分:3)
这是因为即使\n
也会使代码增加计数器。
更改循环的一种方法如下:
while ((c = (char) cin.read()) != '\n') {
System.out.print(c);
counter++;
}
System.out.println(); // this is to print the new line character anyway
这样可以预先执行测试,因此计数器不会递增。
请注意c = (char) cin.read()
不仅将读取字符的值赋给c
,而且还是一个表达式,该值是刚刚读取的字符。这就是我们可以将此事与\n
进行比较的原因。
更一般地说,赋值运算(=)也是一个表达式,该值是赋值右侧的值(您还可以将其视为赋值后变量的值)。
正如@Jan所指出的那样,为了与平台无关,您还可以考虑检查\r
(也会在\r\n
之前停止):
while ((c = (char) cin.read()) != '\n' && c != '\r') {
System.out.print(c);
counter++;
}
System.out.println(); // this is to print the new line character anyway