he20041987 发表于 2008-3-28 17:39

关于输入的问题?(已解决)

import java.io.*;
import java.util.Random;


class Rnd{
        public static void main(String[] args){
                int i,j,k;
                Random rnd1=new Random();
                Random rnd2=new Random();
               
                try{
                        while(true){
                                System.out.print("请输入一个字符(Y/N):");//这里怎么会执行三次了
                                char ch=(char)System.in.read();
                                if(ch=='y'){
                                        System.out.println(rnd1.nextInt()+" "+rnd2.nextInt());
                                }
                                if(ch=='n'){
                                        System.exit(-1);
                                }
                        }
                }catch(Exception e){
                                e.printStackTrace();
                }
        }
}
请教一下这个程序 第一行怎么会运行三次后再输入勒?()

[[it] 本帖最后由 he20041987 于 2008-3-29 18:01 编辑 [/it]]

帅浪 发表于 2008-3-28 20:29

回复 1# 的帖子

import java.io.*;
import java.util.Random;


class Rnd{
    public static void main(String[] args){
        int i,j,k;
        Random rnd1=new Random();
        Random rnd2=new Random();
        
        try{
            while(true){
                System.out.print("请输入一个字符(Y/N):");//这里怎么会执行三次了
                char ch=(char)System.in.read();
                if(ch=='y'){
                    System.out.println(rnd1.nextInt()+" "+rnd2.nextInt());
                }
                if(ch=='n'){ //原因出在这里吧,它没有退出循环,改成if(ch!='y')
                             //就不会出现这种情况了!
                    System.exit(-1);
                }
            }
        }catch(Exception e){
                e.printStackTrace();
        }
    }
}

meteor57 发表于 2008-3-29 17:59

in.read();
从此输入流中读取下一个数据字节。返回一个 0 到 255 范围内的 int 字节值。如果因为已经到达流末尾而没有字节可用,则返回 -1。在输入数据可用、检测到流末尾或抛出异常之前,此方法将一直阻塞。

在循环中,char ch=(char)System.in.read();
如:输入'k'回车
这就等于输入了二个字符
read()先读第一个'k'
再读第二个'\r'(回车符)
最后第三个'\n'()(已经到达流末尾,返回-1)

在C中,可用fflush(stdin);来清除缓冲区.
java用什么,我也不知道-_-!
照二楼的方法暂时可以解决,虽然这不是你的理想结果.

he20041987 发表于 2008-3-29 18:01

呵呵  谢谢各位了?我知道了其实我实际是输入了三次才循环了三次的,问题现在解决了。

页: [1]

编程论坛