package com.itheima;
import java.util.Scanner;
class Text3_1{
/*
* 3、 从键盘接受一个数字,打印该数字表示的时间,最大单位到天,例如:
键盘输入6,打印6秒;
键盘输入60,打印1分;
键盘输入66,打印1分6秒;
键盘输入666,打印11分6秒;
键盘输入3601,打印1小时1秒
*/
// 分析:键盘输入的数字单位为秒,逢60进1为分,再逢60进1为小时,再逢24进1为天,天为最大单位。
static void setN(){
int time = getNum(); //判断并得到键盘输入的数字
outTime(time); //输出时间
/*boolean flag=true;
while(flag){
if(flag)
{
int time = getNum(); //判断并得到键盘输入的数字
outTime(time); //输出时间
}
System.out.println("是否需要继续输入打印的数:是请输入-1,推出请输入-2");
Scanner m=new Scanner(System.in);
int n=m.nextInt();
if(n==-1)
flag=true;
else
break;
}*/
}
private static int getNum() {
boolean judge = true; //定义一个Boolean类型的值来判断输入值的合法性
int result = 0; //定义输入值的初值
while (judge) {
Scanner scan = new Scanner(System.in); //键盘输入
System.out.println("输入一个大于0的整数:");
try {
result = Integer.parseInt(scan.nextLine()); //将键盘输入的值赋给result
if (result < 0) { //判断result是否小于0,小于0则重新输入
throw new Exception("输入的值必须大于0,请从新输入");
}
judge = false; //输入的数符合要求则跳出循环,进行转换计算
} catch (Exception e) {
System.out.println("输入值非法,请从新输入"); //输入值非法则需要从新输入
}
}
return result;
}
private static void outTime(int time) {
int s = 0,m = 0,h = 0, d = 0; //定义秒、分、时和天的初值
if (time<0)
return;
if (time<60) { //输入值小于一分钟
s = time;
} else if (time>=60&&time<60*60) { //输入值小于一小时
m = time/60;
s = time%60;
} else if (time>=60*60&&time<24*60*60) { //输入值小于一天
h = time/(60*60);
m = time%(60*60)/60;
s = time%(60*60)%60;
} else { //输入值大于一天
d = time/(24*60*60);
h = time%(24*60*60)/(60*60);
m = time % (24*60*60)%(60*60)/60;
s = time % (24*60*60) % (60*60) % 60;
}
out(d, h, m, s); //获得转换后的天数、小时、分钟和秒数的值然后将其传出
}
private static void out(int d, int h, int m, int s) { //判断为0的秒数、分钟、小时、天数不输出
String str = "";
if (d != 0) {
str += d + "天";
}
if (h != 0) {
str += h + "小时";
}
if (m != 0) {
str += m + "分钟";
}
if (s != 0) {
str += s + "秒";
}
System.out.println(str); //输出最终结果
}
}
class Text3_2{
//求斐波那契数列第n项,n<30,斐波那契数列前10项为 1,1,2,3,5,8,13,21,34,55
/*分析
* 1.获得用户的输入
* 2.计算
* 3.打印就行了。
*
*/
public static void setfs()
{
int m = 0 ; //用来接收用户要求的项数
//接受用户的输入
m = getN();
Print(m);
}
static void Print(int m)
{
int X = 1;
int Y = 1;
int Z= 0;
if(m==1||m==2)
{
System.out.println("你要求斐波那契数列第"+m+"列的值为:->1");
}
else
{
// 计算N>2的项的斐波那契数列的值
for (int i = 1; i <=m-2; i++)
{
//用最简单的算法实现。
Z = X+Y;
X = Y;
Y = Z;
}
System.out.println("你要求斐波那契数列第"+m+"列的值为->"+Z);
}
}
private static int getN()
{
int n;
System.out.println("提示:请输入求斐波那契数列第n项的值。");
Scanner sc = new Scanner(System.in);
//让用户反复输入。直到输入成功为止
while (!sc.hasNextInt()|| (n=sc.nextInt())>=30)
{
System.out.println("输入错误:请输入求斐波那契数列小于第30项的正整数。");
sc = new Scanner(System.in);
n=sc.nextInt();
}
return n;
}
}
public class Text3 {
/**
* @param args
*/
public static void main(String[] args) {
boolean flage=true;
while(flage)
{
System.out.println("需求1、 从键盘接受一个数字,打印该数字表示的时间,最大单位到天");
System.out.println("需求2、求斐波那契数列第n项,n<30");
System.out.println("请输入1或者2");
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
switch(n)
{
case 1:
Text3_1.setN();
break;
case 2:
Text3_2.setfs();
break;
default:
System.out.println("输入的不是1或者2,结束");
}
System.out.println("继续请输入0,否请按任意键");
n=sc.nextInt();
if(n==0)
flage=true;
else
break;
}
}
}
|
|