当前位置: 首页 > 面试题库 >

System.in.read()不读取

黄俊誉
2023-03-14
问题内容

我是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

的值nnot read()会使程序成为无限循环。

谢谢您的帮助。


问题答案:

我认为,如果您使用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。希望这会有所帮助。



 类似资料:
  • 问题内容: 出于某种原因,每当我在循环使用时按一下该键,此后的代码将立即执行两次。如果不在循环中,它将执行一次!为什么是这样? 这是一个测试它的代码片段: 问题答案: 发生这种情况的原因是,当您按Enter键时,System.in.read()将注册两个字符。应该将其用作扫描仪的更复杂版本,而不是使用扫描仪来执行Scanner.nextLine()或Scanner.nextInt()来返回字符串或

  • 问题内容: java中有什么用? 请解释一下。 问题答案: 可能这个例子会帮助您。

  • 我尝试使用system.in.read()来获取用户的年龄。我的问题是,如果我写“24”,它会给我输出“你50岁了”。我搜索了一下,发现这和编码有关。所以24映射为50。 有人建议将integer转换为char。所以应该管用。但这一次当我把24,我得到的答案是“你2岁”。 小注:“alter”在德语中是年龄的意思。 我希望有人能帮助我,理解这个问题。如果我能改进什么,请告诉我。不胜感激。

  • 我有一个使用S3存储桶的Spring启动应用程序。根据亚马逊(https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/java-dg-roles.html),订单应该是: 在系统环境变量中:AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY。 在 Java 系统属性中:“aws.access 密钥 Id”和

  • 问题内容: 当我需要获取电子来读取本地文件时,我有一个电子项目。 现在我所拥有的就是它,它在其中加载并显示html文件的内容。 我只需要它来读取文件并将其存储在变量上。 这是我当前的main.js: 我如何做到这一点,因为它没有在console.log中显示README.md文件的内容 问题答案: 基本上,您需要执行以下操作。 1.加载所需的依赖项 2.读取文件内容 3.更新现有文件内容 欲了解更

  • 问题内容: 我在使用npm时遇到问题,无法安装任何程序。这是错误消息: 知道为什么吗?这是我的网络设置,似乎我没有配置任何代理。我还禁用了所有防火墙。 问题答案: 用 因此npm要求url而不是。 然后尝试相同的命令