个人感觉解题思路可以,包括录入验证,包装方法,如果大家有好的方法,也可以提供给我,或者在我代码的基础上加以修改
package com.itheima;
import java.io.*;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
/*
*第四题:从键盘接受一个数字,打印该数字表示的时间,最大单位到天,例如:
* 键盘输入6,打印6秒;
* 键盘输入60,打印1分;
* 键盘输入66,打印1分6秒;
* 键盘输入666,打印11分6秒;
* 键盘输入3601,打印1小时1秒;
*/
public class Test4 {
public static void main(String[] args) {
System.out.println("请输入正整数:");
//创建BufferedReader对象,获取输入值
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
try {
String sSecond=br.readLine();
//当录入非正整数,要求重新输入新值,直到输入正确
while(!IsNumeric(sSecond))
{
System.out.println("刚才录入内容非正整数类型,请输入正整数:");
sSecond=br.readLine();
}
int nSecond=Integer.parseInt(sSecond);
String sTime=ConvertTime(nSecond);
System.out.println(sTime);
} catch (IOException e) {
e.printStackTrace();
}
}
//定义1个方法,判断录入值是否为数值型
static boolean IsNumeric(String str){
Pattern pattern = Pattern.compile("([1-9][0-9]*)|([0-9])");
Matcher isNum = pattern.matcher(str);
if( !isNum.matches() ){
return false;
}
return true;
}
//创建一个时间转换时间的方法
public static String ConvertTime(int pnSecond){
//定义返回值
String sTime="";
int[] arrTime=new int[4];
String[] arrString=new String[]{"秒","分","时","天"};
//定义除数
int nDivisor=60;
for(int i=0;i<4;i++)
{
if(i==2)
{//最后一次运算除数是24
nDivisor=24;
}
else if(i==3)//最后一次不用计算天,直接得值
{
arrTime[i]=pnSecond;
break;
}
//将余数的值放入数组中
if(pnSecond/nDivisor>0){
arrTime[i]=pnSecond%nDivisor;
pnSecond=pnSecond/nDivisor;
}
else
{
arrTime[i]=pnSecond;
break;
}
}
for(int i=3;i>=0;i--)
{
if(arrTime[i]>0)
{
sTime+=arrTime[i]+arrString[i];
}
}
return sTime;
}
}
|
|