2014-09-26 46 views
0

这个程序是一个神奇的日期程序(日期时间=“两位数字的年份”),如06 \ 10 \ 60 ...我想做一个条件...如果一天或一个月或一年中输入的多于或少于2个位数应显示错误消息......我想这如何从用户获取int输入的数量并同时存储用户的输入?

System.out.println("Please enter the day as a two digit Number"); 
day=key.nextInt(); 
day1=day.length(); 

,但它没有工作...所以我尝试这样做:

System.out.println("Please enter the month as a two digit Number"); 
month1=key.next().length(); 
month=key.nextInt(); 

但是当我运行该程序...它需要两个输入不是一个 所以帮我出去

+2

您正在阅读一个int,并且您正在尝试使用'.length()'? – gtgaxiola 2014-09-26 15:22:08

+0

为什么不将int temporally转换为字符串来检查长度? – reporter 2014-09-26 15:24:17

+0

@gtgaxiola我还需要输入的int数... – 2014-09-26 15:26:21

回答

1

的问题是,你正在使用nextInt()但你想两个数字像06这不是一个有效的整数。

这将是更好的:

  1. 扫描输入的字符串。 String day = scan.nextLine();

  2. 验证为正确的输入使用day.matches("\\d{2}")
    (这将只匹配[0-9]中的任意配对,不担心其他字符)

  3. 如果验证,那么你可以让你的整数:Integer realDay = Integer.valueOf(day);

  4. (为1-31天)(数月1-12)进行进一步的验证,测试范围(1-28或1-29二月取决于年)等

1

只需:

day = key.nextInt(); 
int dayAbs = Math.abs(day);  // to handle negatives 
if(dayAbs >= 10 && dayAbs <= 99) { 
    // ... 
} 
+1

不应该是'天> 99 ||天<10'? OP说** ...多于或少于2位数...... **,所以任何有2位数字的应该是好的。 (不考虑50个月中的某一天是不合理的,因此验证的数字数量太少;-) – azurefrog 2014-09-26 15:23:24

0

来测试的位数在一个int原始尝试这种

int number = ...; 
// or however you get the number 

int length = (int)(Math.log10(number)+1); 

if(length!=2) { 
    // no! 
} else { 
    // yuss! 
} 
+0

或此int长度= Integer.valueOf(数字).toString()。length() ;' – bhowden 2014-09-26 15:34:57

0

除了使用INT使用串然后检查输入的长度。此代码只是一个基础。它存储在结果中。然后在检查后使用Integer.parseInt(result);

System.out.println("Please enter two digits:"); 
    Scanner scan = new Scanner(System.in); 
    String result = scan.next(); 
    if(result.length()>2 || result.length()<2) 
     System.out.println("ERROR"); 
    else 
     System.out.println("Success"); 
0

事实上,它似乎要执行字符串的长度,使用户必须键入06,而不是6

如果是这样的:

String dayString = key.next(); 
if(dayString.length() != 2) { 
    // throw error 
} 
int day = Integer.parseInt(dayString); 
1

只需将int转换为字符串,然后通过检查字符串的长度即可完成此操作。

String s = Integer.toString(day); 
if(s.length() <= 2 && !(s.length() < 1)){ 
    System.out.println("Good"); 
}else 
    System.out.println("Bad"); 
0
int day=key.nextInt(); 
String dayString = ""; 
if(day> 30 || day <0){ System.out.println("Error1");} 
else if(day<10){ dayString = "0" + String.valueOf(day);} 
else{dayString = String.valueOf(day);} 

这里u有UR两位数字作为一个字符串的一天,更容易操纵。 你也可以尝试Date类(java.util.Date)

0

我不明白你为什么使用密钥,但我认为缓冲区读取器可以解决你的问题在这里是例子!

int month=0,length=0; 
     String len=null; 
     BufferedReader bf=new BufferedReader(new InputStreamReader(System.in)); 
     System.out.println("Please enter the month as a two digit Number"); 
     len=bf.readLine(); 
     length=len.length(); 
     month=Integer.parseInt(len); 
     if(length==2) 
     { 
      System.out.println("Here you go month is two digit!"); 
     } 
     else 
     { 
      //inform user that month is not 2 digits! 
     }