为什么我运行下面的java application程序,不管输入的是1—100间的什么数字,输出的总是“2”

import java.io.*;
import java.io.InputStream;

public class Score {
private void i2i(int a) {
if (a >= 0) {
if (a <= 100) {
if (a >=90 && a <= 100) {
System.out.println("5");
}
if (a >= 75 && a <= 89) {
System.out.println("4");
}
if (a >= 60 && a <= 74) {
System.out.println("3");
}
if (a >= 40 && a <= 59) {
System.out.println("2");
}
else{System.out.println("1");}
}
}
}

public static void main(String[] args) {
Score score = new Score();
InputStream is = System.in;
System.out.println("请输入0—100的考试分数:");
try{
int a = (int) (is.read());
score.i2i(a);
} catch (IOException ex) {
}
}
}

InputStream is = System.in;
这条语句可以得到一个字符,而不是一个字符串;
例如:你输入1111,得到的只是1这个字符。
还有int a = (int) (is.read());
这条语句你得到结果是字符is.read()在ascii码表里面编号;
例如:你输入字符’1‘得到结果是ascii码表里面编号49;
因此,你得到a的结果是48-57这个数值,所以你调用 score.i2i(a);得到的结果是2了
程序修改如下:import java.io.*;
import java.io.InputStream;

public class Score {
private void i2i(int a) {
if (a >= 0 && a <= 100) {
if (a >= 90) {
System.out.println("5");
} else if (a >= 75) {
System.out.println("4");
} else if (a >= 60) {
System.out.println("3");
} else if (a >= 40) {
System.out.println("2");
} else {
System.out.println("1");
}
}
}

public static void main(String[] args) {
Score score = new Score();
System.out.println("请输入0—100的考试分数:");
try {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String inputline = in.readLine();
int a = Integer.parseInt(inputline);
score.i2i(a);
} catch (IOException ex) {
}
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-10-26
is.read()读入的是字节吧!你的那个读入在这里不适应了。你把
try{
int a = (int) (is.read());
score.i2i(a);
} catch (IOException ex) {
}
改成
while(true){
System.out.println("请输入0—100的考试分数:");
try{
int a = (int) (is.read());
score.i2i(a);
} catch (IOException ex) {
}
}
加个while就知道了,它打印的不止一次了。你用Scanner类的readLine()输入方便好多了
==================================
至于那个输出2的原因是read()返回的是读入的字节数了,你输入一长串字符的话,输出的值会变得
第2个回答  2011-10-26
不对吧。你的结果应该不是2就是1吧。。。你的那个全是if判断。连续判断都因该是
if (a >= 90 & a <= 100) {
System.out.println("5");
}else if (a >= 75 & a <= 89) {
System.out.println("4");
}else if (a >= 60 & a <= 74) {
System.out.println("3");
}else if (a >= 40 & a <= 59) {
System.out.println("2");
} else {
System.out.println("1");
}
主函数里。我是这样得到输入结果的。你的那种要是行的话也可以。。。
Score score = new Score();
System.out.println("请输入0—100的考试分数:");
Scanner sc = new Scanner(System.in);
String l = sc.next();
int a=Integer.parseInt(l);
score.i2i(a);
第3个回答  2011-10-26
在main函数里面修改一下获取方式
InputStream is = System.in;
改为
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String inputline = in.readLine();
int a = Integer.parseInt(inputline);

那么获取出来的数据就对了。

还有刚刚看了下,你在 i2i() 方法里面的if else 有点点问题
if (a >= 40 && a <= 59) {
System.out.println("2");
} else{
System.out.println("1");
}
如果 a >= 40 && a <= 59 为false 那么就一定会输出 1
结合前面的判断那么就有点问题
你自己测试一下就知道了。

要么 if 改为 else if 来处理
if (a >= 90 && a <= 100) {
System.out.println("5");
} else if (a >= 75 && a <= 89) {
System.out.println("4");
} else if () {
...
} else {
...
}
第4个回答  2011-10-26
if ((a >= 40) && (a <= 59)) 你把所有这样的判断加上括号看看追问

没用,还是这样

追答

你调试时查看下 a = (int) (is.read());这个地方给a的值,如果是正常的,那么整体程序就没有什么问题了。你再试下。问题应该就是a的值有问题。0-9的asc码正好是在你的那个判断范围内,所以你输入什么都返回2.你用的read(),只能读一个字节,要换一个才对
import java.io.BufferedReader;
将那一句改为下面试看看
BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
String tmp=br.readLine().toString();
int a=Integer.parseInt(tmp);

第5个回答  2011-10-26
这还用说吗? 因为你真的很“二”哦。 哈哈

JAVA创建一个数组,存放1--100的值,然后输出其中的偶数。
int[] i = new int[100];\/\/定义一个整形数组,大小为100;\/\/...可用Scanner;int len = i.length; \/\/获取数组长度;for(int j = 0;i

编程java编写程序实现键盘输入1~100之间的整数,根据提示信息才出电脑产...
public class test { public static void main(String[] args) { int i = (int) (Math.random() * 100 + 1);int j = 2;int x = 1;boolean flag = true;while (x != 0) { while (flag) { Scanner scan = new Scanner(System.in);if (scan.hasNextInt()) { \/\/ 判断输入的...

java 输出1~100之间所有的奇数按一行4个全部输出
import java.util.Scanner;public class testcode{ public static void main(String[] args) { System.out.println("输入区间范围a,b"); Scanner sc = new Scanner(System.in); int a = sc.nextInt(); int b = sc.nextInt(); while(a>=b){ System.out.println("...

在Java编写程序输出1到100之间的所有素数?
下面是用Java编写的程序,可以实现输出1到100之间的所有素数:Copy codepublic class Main { public static void main(String[] args) { for (int i = 2; i <= 100; i++) { \/\/ 判断i是否为素数 boolean isPrime = true;for (int j = 2; j < i; j++) { if (i % j == 0) ...

用java编写程序输出1-100间所有奇数
用java编写程序输出1-100间所有奇数:System.out.println("1-100间所有奇数:");for(int i=0;i<100;i++){ if(i%2!=0){System.out.print(i+" "); }}

java中我要实现读取在1到100之间的整数,然后计算每个数出现的次数,我的...
import java.util.Scanner;public class test { public static void main(String[] args) { Scanner input = new Scanner(System.in);int[] zs = new int[5]; \/\/数组默认全初始化为0 System.out.println("Enter the integers between 1 and 100:"); \/\/输入数 for (int j = 0; j < ...

java中我要实现读取在1到100之间的整数,然后计算每个数出现的次数,我的...
System.out.println("Enter the integers between 1 and 100:");\/\/ 可以考虑换个思路,把输入的数减去1,作为数组下标。 zs[x-1]就可以了,不需要循环 while(input.hasNextInt()){ for(int j=0;j<zs.length;j++){ if(input.nextInt()==j)zs[j-1]++;\/\/ 问题可能出在这里,迭代以后...

用java实现取1-100之间的99个不重复的随机数 然后输出没有被取出的...
直接用默认lang包就可以了,什么都不用加载的 public static void main(String[] args) { int[] a = new int[100];int[] b = new int[99];int n = a.length;for(int i = 0; i < a.length; i++) { a[i] = i + 1;} for(int j = 0; j < b.length; j++) { int ...

用java 编写程序,只允许输入1-100的整数,不允许输入字符串或文字或大于...
import java.util.Scanner;public class InputNumber { \/ param args \/ public static void main(String[] args) { String num;Scanner s = new Scanner(System.in);System.out.println("输入一个1-100的数字:");num = s.next();System.out.println(num);int a;try { a = Integer.value...

使用Java程序输出1~100之间 7的倍数的个数.并打印.
int sum = 0;for (int i = 1; i < 101; i++) {if(i%7 == 0)sum += 1;}System.out.println(sum);

相似回答