0 0

一个月份查询的,不知道错在哪.5

public class Month {   
    public static void main(String args[]) throws java.io.IOException   
    {   
    int M;//月   
    int D=0;//天   
    do{   
        M=0;   
        System.out.print("输入一个月份");   
        System.out.println("");   
        M = (int)System.in.read();   
    }while(M<1 | M>12);   
    System.out.println("");   
    switch(M){   
    case 2:D=28;break;   
    case 1:   
    case 3:   
    case 5:   
    case 7:   
    case 8:   
    case 10:   
    case 12:D=31;break;   
    case 4:   
    case 6:   
    case 9:   
    case 11:D=30;break;   
    default:System.out.println("输入无效");break;   
    }   
    System.out.println(M + "月有"+ D +"天");   
    }   
}  


请大大解答一下...
小弟不知错在哪了...
2008年6月23日 18:30

8个答案 按时间排序 按投票排序

0 0

采纳的答案

这个。。。
贴代码是因为是在楼主的代码的基础上改的。而且也注释了一下为什么这样改。可能不够详细。呵呵下次改正
顺便说说IO的问题。
M = (int) System.in.read();
得到不是输入的第一位,而是输入的字符的编码的第一个byte。
比如你输入一个2然后回车,可以用System.in.read()读3次,分别是50,13,10可以用下面代码试验就知道了:

while(true){
   System.out.println(System.in.read());
}


为了验证50,13,10就是2,你可以
System.out.println(new String(new byte[]{50,13,10}));

看看是不是2就知道了。
in是InputStream,所以要用个InputStreamReader来将其包装成Reader,Reader是专门将字节流转换成字符流的。而InputStreamReader本身使用不是那么方便,所以再包装一个BufferedReader,使用其b.readLine方法来获取输入的字符非常方便,因为你期望的输入是整数,所以就偷懒了一下直接用Integer的parseInt方法来做转换,加入输入的是字母,这里是抛出异常,楼主可以自己优化一下。

IO就是这样一个包装另外一个来使用的。这种形式非常常见,这里就不展开了。

2008年6月24日 00:32
0 0

你的输入语句有问题,System.in.read(); 得到的是一个字节,你看到的是一个AscII码值。应该得到的是一个字符对吧,那么就用下面的代码就可以了

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));这样得到的就是一个字符了,OK

2008年6月24日 10:36
0 0

M = (int) System.in.read();

只能得到输入的第一位。

输入1,得到 1对应AscII的 49
输入11 得到 1对应AscII的 49
输入2, 得到 2对应Ascii的 50
输入22, 也只能得到2对应Ascii的50


这个就是代码用错的地方呀.

2008年6月24日 10:19
0 0

对于2月份而言,不输入具体年份,是得不到正确日数的

2008年6月24日 09:34
0 0

哎呀,说错了。lggege 还是说的对。
M = (int) System.in.read();

只能得到输入的第一位。br.readLine()包括了13,10;是回车换行符。

看来还是疏忽了。SORRY。

2008年6月24日 00:38
0 0

应该说一下错在哪里,而不是直接贴代码

2008年6月23日 22:58
0 0

M = (int) System.in.read(); 

只能得到输入的第一位。


输入1,得到 1对应AscII的 49
输入11 得到 1对应AscII的 49

在你的
M = (int) System.in.read();
下面加一句
System.out.println(M);
就知道了

2008年6月23日 19:32
0 0


public static void main(String args[]) throws java.io.IOException      
    {      
    int M;//月      
    int D=0;//天      
    do{      
        M=0;      
        System.out.print("输入一个月份");      
        System.out.println(""); 
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));//此处修改,System.in.read()读出来来的是字节。不是字符
        M = Integer.parseInt(br.readLine());      
    }while(M<1 | M>12);      
    System.out.println("");      
    switch(M){      
    case 2:D=28;break;      
    case 1:      
    case 3:      
    case 5:      
    case 7:      
    case 8:      
    case 10:      
    case 12:D=31;break;      
    case 4:      
    case 6:      
    case 9:      
    case 11:D=30;break;      
    default:System.out.println("输入无效");break;      
    }      
    System.out.println(M + "月有"+ D +"天");      
    }

2008年6月23日 18:49

相关推荐

    又一款很不错的万年历查询

    7. 其他附加功能:如天气预报、健康养生建议等,让万年历不仅仅是一个日期查询工具。 虽然该应用的界面设计可能略显朴素,但功能性是衡量一个工具好坏的关键标准。对于那些不那么在意视觉效果,更注重实用性的人来...

    java源码包---java 源码 大量 实例

    5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...

    卓帐免费版财务软件安装包

    月末结帐管理:当一个会计期间的帐务处理完毕后,打开月末结帐管理窗口即可将当前期间的帐务做月结处理,在做月结的同时系统自动生成新的会计期间。软件还提供了反结功能,在需要更改已月结的帐务时,可通过反月结...

    最新Java面试宝典pdf版

    3、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个,如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉...

    JAVA面试宝典2010

    3、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个,如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉...

    Java面试宝典-经典

    3、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个,如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉...

    Java面试宝典2012版

    3、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个,如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉...

    java面试题大全(2012版)

    3、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个,如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉...

    java面试宝典2012

    3、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个,如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉...

    Java面试宝典2012新版

    3、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个,如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉...

    java源码包2

    5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...

    java源码包3

    5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...

    java源码包4

    5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...

    2008万年历

    这些附加功能为软件增添了趣味性和实用性,使得《2008万年历》不仅仅是一个日历工具,还是一个生活小助手。 在使用场景上,无论是家庭用户计划家庭聚会,还是上班族安排工作任务,甚至是学生准备考试复习,都可以...

    网趣网上购物系统时尚版V13.0

    用户帐号一站式通用,即无无论是在商城还是在论坛只须注册一个帐号即可,全站使用,是目前网上开店的理想平台。 三八、增加了商城报价中心功能! 对于商城商品数量较多的网站,查找一个商品或快速浏览商品是经常的...

Global site tag (gtag.js) - Google Analytics