Java输入问题

我本来想用Java做一个输入两个数后算出和并输出:源代码:importjava.io.BufferedReader;importjava.io.InputStreamRe... 我本来想用 Java 做一个输入两个数后算出和并输出:
源代码:
import java.io.BufferedReader ;
import java.io.InputStreamReader ;
import java.io.IOException ;

public class test2
{
public static void main( String[] args ) throws IOException
{
BufferedReader input = new BufferedReader( new InputStreamReader( System.in ) ) ;
int num1 , num2 ;
System.out.println( "pls enter the 1st number : " ) ;
num1 = input.read() ;
System.out.println( "pls enter the 2nd number : " ) ;
num2 = input.read() ;
test2 c = new test2() ;
c.calculate( num1 , num2 ) ;
}

public void calculate( int num1 , int num2 )
{
int sum ;
sum = num1 + num2 ;
System.out.println( sum ) ;
}
}

结果编译并运行后发现输入完第一个数字并按回车后就直接给了一个很奇怪的数:

其中1是我输的,按完回车后就自动出来了一个六十二……
然后我又试了试,发现:
0 -> 61
1 -> 62
2 -> 63
3 -> 64
-1 -> 94
-2 -> 95
于是我就把语句改了一下,看看是不是输入的时候错了:
改后的源代码:
import java.io.BufferedReader ;
import java.io.InputStreamReader ;
import java.io.IOException ;

public class test2
{
public static void main( String[] args ) throws IOException
{
BufferedReader input = new BufferedReader( new InputStreamReader( System.in ) ) ;
int num1 , num2 ;
System.out.println( "pls enter the 1st number : " ) ;
num1 = input.read() ;
System.out.println( "pls enter the 2nd number : " ) ;
num2 = input.read() ;
System.out.println( num1 + "\n" + num2 ) ;
// test2 c = new test2() ;
// c.calculate( num1 , num2 ) ;
}

public void calculate( int num1 , int num2 )
{
int sum ;
sum = num1 + num2 ;
System.out.println( sum ) ;
}
}
结果:

其中1是我输的,然后直接给了我49和13
……
求解!!!
展开
 我来答
第一碗羊杂割
2015-07-14 · TA获得超过6145个赞
知道大有可为答主
回答量:1107
采纳率:80%
帮助的人:563万
展开全部

先说一下为什么会出现这种情况。


第一点,请记住你在 System.in 中输入的任何东西(包括空格回车等)都是字符(char),比如你输入了 1,这个是字符的 '1',而不是 1 这个整数。只有经过一些方法的修改后(比如 Integer.parseInt()),这个字符 '1' 才会变成真正的整数 1。


另外,在 Java 中,每个字符都有其一个对应的整数值,也就是 ASCII 码表中的对应数值,比如字符 '1' 对应的整数是 49,字符 '\n' 对应的整数是 13,字符 '-' 对应的整数是 45。你可以看一下下面的 ASCII 码表寻找对应的关系(图中的 Carriage Return 即为回车,也就是 Java 中的 '\n')。



现在看题主所用的 BufferedReader 的 read() 方法。这个方法会返回一个整数,但这个整数并不是你输入的那个整数,而是输入流中的下一个字符在 ASCII 码表中的整数值。你首先用了

num1 = input.read() ;

也就是说 num1 是 input 所代表的输入流(也就是标准输入 System.in)中的下一个字符在 ASCII 码表中的整数值。这时你在屏幕上输入了 1 并按了回车,这就相当于在标准输入 System.in 中输入了

"1\n"

这个字符串。它由两个字符 '1' 和 '\n' 组成,在 ASCII 码表中的值分别为 49 和 13。因为 num1 是下一个字符,也就是 '1',所以 num 1 的值就是 49。

然后你又读取了 num 2,仍然以

num2 = input.read() ;

的方法,这时 input 中没有读取的还有一个字符 '\n',所以系统不会让你再次输入,而是直接读取了这个 '\n' 并把它代表的整数值 13 赋给了 num2。所以 num2 现在就是 13。

这样两数相加就是 62 了。


你后面的几个输入都可以根据 ASCII 码表这么看,比如输入了 -1 回车,这个字符串就由 '-','1','\n' 三个字符组成,num1 读取了第一个 '-',也就是对应的 ASCII 码值 45,num2读取了第二个 '1',也就是对应的 ASCII 码值 49,那么两数相加自然就是 94 了。


至于修改方法,另外两位已经说得很详细了,可以用 BufferedReader 的 readLine() 或者 Scanner 的 nextInt() 方法。要注意的就是 readLine() 方法读取的是一个字符串,要用 Integer.parseInt() 方法来将它转换为整数。

耳东故事会
2015-07-14 · 阅尽百态,看遍冷暖,精彩故事。
耳东故事会
采纳数:125 获赞数:457

向TA提问 私信TA
展开全部

试试用readLine()方法

num1 = Integer.parseInt(input.readLine() );

num2 = Integer.parseInt(input.readLine() );

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
slzlong龙
2015-07-14 · 超过15用户采纳过TA的回答
知道答主
回答量:70
采纳率:0%
帮助的人:36.9万
展开全部
应该按数字读入
采用Scanner类
如:Scanner input = new Scanner(System.in);
int a = input.nextInt();
这样就实现了数字的输入啊。
或是你以字符的方式输入 再将其转换为数字就可以了啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式