当前位置: 首页 > 知识库问答 >
问题:

Java-方法程序-使用带方法的开关盒

沙星波
2023-03-14

我正在编写一个程序,接收用户的出生信息,年、月、日、时、分。该计划如下:

使用< code>getRangedInt方法输入一个人出生的年份(1965-2000)、月份(1-12)、日期*、小时(1-24)、分钟(1-59)。

注意:使用switch()条件选择器结构将用户限制在其出生月份的正确天数内。例如,如果他们出生在2月[1-29]日、10月[1-31]日。提示:这里只有几个组,而不是12个不同的组!

我完全搞不懂白天的部分。除了明白我今天应该做什么,我已经设法让其他一切都开始工作了。

我的代码:

public static void main(String[] args) 
{
    int year, month, day, hour, minutes;
    String msg="";
    boolean done = true;
    Scanner in = new Scanner(System.in);

    while(done)
    {
        year = SafeInput.getIntInRange(in, "Enter the year you were born: ", 1965, 2000);       
        month = SafeInput.getIntInRange(in, "Enter your month of birth: ", 1, 12);
        day = SafeInput.getIntInRange(in, "Enter the day you were born: ", day, day);      
        hour = SafeInput.getIntInRange(in, "Enter the hour you were born in: ", 1, 24);
        minutes = SafeInput.getIntInRange(in, "Enter the minutes you were born: ", 1, 59);

        System.out.println("You were born: " + year + " , " + msg + " , " + hour + " hr. " + minutes + " mins. ");

        done = SafeInput.getYNConfirm(in, "Would you like to play again?");
    }
}

getIntInRange只是做一个基本的输入来获取范围内的数字。我很困惑,因为我不知道如何做当天的范围,因为也应该使用开关。

共有3个答案

段干帅
2023-03-14

您的范围取决于用户输入的上一个编号,因此您必须检查该编号才能知道要显示的日期范围。提示告诉您的是,您不需要每个月都有不同的有效天数范围,因为某些月份共享相同的范围。以下是一个月的天数:

January     31
February    28/29
March       31
April       30
May         31
June        30
July        31
August      31
September   30
October     31
November    30
December    31

如您所见,只有3个组,任务要求您在<code>开关中不<code>中断</code>时利用故障排除:

int upperDaysLimit;
switch(month) {
    case 1:
    case 3:
    case 5:
    //...
    case 12: upperDaysLimit = 31;
             break;
    case 4:
    case 6:
    // and so on
}

现在,您可以在查询天数时使用该范围限制:

day = SafeInput.getIntInRange(in, "Enter the day you were born: ", 1, upperDaysLimit);
郭业
2023-03-14

在这里,您的一天取决于输入的月份。因此,首先您需要像现在这样将用户输入的月份作为一个整数,并继续在一个开关中使用该数字:

int month = 0;
int numberOfDays;

        switch (month) {
            case 1:  numberOfDays = DaysInJanuary;
                     break;
            case 2:  numberOfDays = DaysInFebruary;
                     break;
            case 3:  numberOfDays = DaysInMarch;
                     break;
            case 4:  numberOfDays = DaysInApril;
                     break;
            case 5:  numberOfDays = DaysInMay;
                     break;
            case 6:  numberOfDays = DaysInJune;
                     break;
            case 7:  numberOfDays = DaysInJuly;
                     break;
            case 8:  numberOfDays = DaysInAugust;
                     break;
            case 9:  numberOfDays = DaysInSeptember;
                     break;
            case 10: numberOfDays = DaysInOctober;
                     break;
            case 11: numberOfDays = DaysInNovember;
                     break;
            case 12: numberOfDays = DaysInDecember;
                     break;
            default: throw new IllegalArgumentException("Not a valid month");
                     break;
        }

然后,您可以继续为“最大日”范围设置变量。

day = SafeInput.getIntInRange(in, "Enter the day you were born: ", 1, numberOfDays);

希望这有帮助。

乜烨霖
2023-03-14

这是一个非常奇怪的要求。

它看起来像什么是从你看起来像这样的东西:

int numberOfDays;
switch (month) {
case 1: // $FALL-THROUGH
case 3: // $FALL-THROUGH
case 5: // $FALL-THROUGH
case 7: // $FALL-THROUGH
case 9: // $FALL-THROUGH
case 11:
    numberOfDays = 31;
    break;
case 4: // $FALL-THROUGH
case 6: // $FALL-THROUGH
case 8: // $FALL-THROUGH
case 10: // $FALL-THROUGH
case 12:
    numberOfDays = 30;
    break;
case 2:
    numberOfDays = (0 == year / 4) ? 29 : 28;
    break;
default:
    throw new IllegalArgumentException("month not 1-12");
} // switch (too long for my liking)

然后呢

day = SafeInput.getIntInRange(in, "Enter the day you were born: ", 1, numberOfDays);

这利用了交换机中可用的贯穿构造,因此如果您满足条件,您将执行直到返回语句(或中断/抛出)。

请记住,替代方案是:

private static final Set<Integer> MONTHS_30_DAYS = Sets.newTreeSet(4, 6, 8, 10, 12);
private static final Set<Integer> MONTHS_31_DAYS = Sets.newTreeSet(1, 3, 5, 7, 9, 11);

public static int numberOfDays(int month, int year) {
   if (MONTHS_30_DAYS.contains(month)) {
      return 30;
   } else if (MONTHS_31_DAYS.contains(month)) {
      return 31;
   } else {
     return (0 == year / 4) ? 29 : 28;
   }
}
 类似资料:
  • 我尝试使用charAt和子字符串,但被卡在子字符串部分,输出结果应该交换第一个和最后一个字符并打印出来。

  • 本文向大家介绍浅谈java线程join方法使用方法,包括了浅谈java线程join方法使用方法的使用技巧和注意事项,需要的朋友参考一下 本博客简介介绍一下java线程的join方法,join方法是实现线程同步,可以将原本并行执行的多线程方法变成串行执行的 如图所示代码,是并行执行的 打印出来的信息,都是这样的 执行时间:0 线程1:1 线程2:1 线程2:2 线程2:3 线程2:4 线程2:5 线

  • 本文向大家介绍在小程序开发中使用npm的方法,包括了在小程序开发中使用npm的方法的使用技巧和注意事项,需要的朋友参考一下 微信小程序在 2.2.1 版本后增加了对 npm 包加载的支持,使得小程序支持使用 npm 安装第三方包。 1. 在小程序中加载 npm 包 node_modules可以 在小程序根目录下,也可以存在于小程序根目录下的各个子目录中。但是不可以 在小程序根目录外。使用--pro

  • 这个问题是由打字错误或无法再复制的问题引起的。虽然类似的问题可能在这里讨论,但这一问题的解决方式不太可能帮助未来的读者。 我对java很陌生,试图编写一个简单的代码,包含main方法和另外两个方法(calcAverage和determineGrade)。我一直在试着让它工作,但是这两种方法都出错了 我尝试切换变量并切换方法的工作方式,但我什么也得不到。

  • 本文向大家介绍TypeScript开发Node.js程序的方法,包括了TypeScript开发Node.js程序的方法的使用技巧和注意事项,需要的朋友参考一下 当我第一次发现 TypeScript 时,就把它用到了自己的 JavaScript 程序中。使用 TypeScript 有很多好处,现在你要让我在用原生 JavaScript 写任何东西的话,需要给我一个令人信服的理由。 在本文中,我将向你

  • 我正在制作一个彩票程序,模拟一个人选择6个中奖号码,并使用多种方法抽奖中奖号码。 这是一个示例输出 我的问题是,查找匹配总数的方法不起作用,我不知道如何修复它。用户输入的数字和彩票随机数都是数组 这是我的代码: