我是Java的新手,所以如果这是一个非常小的错误,请原谅我 这是我的代码:
import java.io.*;
public class election
{
public static void main(String args[])
{
boolean x=false;
Ballot ballot=new Ballot();
int n;
while(x!=true)
{
System.out.println("Cast your vote to(1-5): ");
try
{
n=System.in.read();
System.out.flush();
ballot.add(n);
System.out.println("Enter 0 to exit, enter 1 to vote again: ");
n = System.in.read();
if(n==0)
{
x=true;
}
else
{
x=false;
}
}
catch(IOException e)
{
System.out.println("I/O Error");
System.exit(1);
}
}
}
}
class Ballot
{
int votes,spoilt;
int cand[] = new int[5];
//methods
void add(int n)
{
votes=votes+1;
if(n <= 5 && n>=1)
{
cand[n-1]=cand[n-1]+1;
}
else
{
spoilt = spoilt + 1;
}
}
void display()
{
System.out.println("Total votes cast: " + votes);
for(int i=0;i<5;i++)
{
System.out.println("Candidate " + (i+1) + ": " + cand[i]);
}
System.out.println("Spoilt: " + spoilt);
System.out.println("Valid votes: " + (votes-spoilt));
}
Ballot()
{
votes=0;
spoilt=0;
for(int i=0;i<5;i++)
{
cand[i]=0;
}
}
}
当我在编译后运行它时,第18行(n = System.in.read())被跳过。 我得到的输出是:
投票给(1-5):
1 输入0退出,输入1再次投票:
投票给(1-5):
2 输入0退出,输入1再次投票:
投票给(1-5):
^ C
n
的值不是read()
,这使程序成为无限循环。
感谢您的帮助。
答案 0 :(得分:6)
我认为如果你使用Scanner类会更容易。您可以像Scanner scan = new Scanner(System.in);
那样实例化扫描程序对象。然后第18行可以成为n = scan.nextInt();
这应该正确读取用户输入。有关Scanner类的更多信息,请参阅Java文档:http://docs.oracle.com/javase/6/docs/api/java/util/Scanner.html。希望这有帮助。
答案 1 :(得分:3)
System.in.read()
只读取一个字节,但是当您点击“Enter”时标准输入流只会刷新。因此,在第一次调用返回时,有两个字节需要读取('1'
,'\n'
)。正常返回'1'
,然后在下次调用时返回'\n'
。
我还应该指出,读取的值不会像您期望的那样转换为int
。例如,'1'
将为49
十进制,或32
十六进制。您可以尝试通过减去'0'
来尝试转换它,但正如其他人指出的那样,最好使用更高级别的函数来输入整数。