Java 程序,当给定一个数字时返回一个日期,并在给定另一个数字时返回将来的日期



好的,所以我正在尝试创建一个程序,当给定一个从 0 到 6 的数字时,它将返回一周中的某一天(例如 0 = 星期日,1 = 星期一......之后,它将要求用户输入另一个数字,并计算出该天数中的哪一天。所以它看起来像这样:

输入数字:0
输入已过去的天数:4
现在是星期天,将来是星期四

我尝试了几种不同的方法,但似乎找不到一种有效的方法。这是我提出的最新内容:

import java.util.Scanner;
public class code
{
    public static void main (String[] args)
    {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Enter today's day:");
        int num = scanner.nextInt();
        
        if(num > 6 || num < 0) {
            System.out.println("This is an invalid number");
        }
        
        switch(num) {
            case 0:
                String day = "Sunday";
                break;
            case 1:
                String day = "Monday";
                break;
            case 2:
                String day = "Tuesday";
                break;
            case 3:
                String day = "Wednesday";
                break;
            case 4:
                String day = "Thursday";
                break;
            case 5:
                String day = "Friday";
                break;
            case 6:
                String day = "Saturday";
                break;
        }
        
        Scanner scanner2 = new Scanner(System.in);
        System.out.println("Enter the number of days elapsed since today:");
        int num2 = scanner2.nextInt();
        
        
        
        int newday = num + num2;
        
        while(newday > 6) {
            newday = newday - 7;
        }
        
        switch(newday) {
            case 0:
                String day2 = "Sunday";
                break;
            case 1:
                String day2 = "Monday";
                break;
            case 2:
                String day2 = "Tuesday";
                break;
            case 3:
                String day2 = "Wednesday";
                break;
            case 4:
                String day2 = "Thursday";
                break;
            case 5:
                String day2 = "Friday";
                break;
            case 6:
                String day2 = "Saturday";
                break;
        }
            
        
        System.out.println("Today is " + day + " and the future day is " + day2);
    }
}

以下是编译器给我的错误:

14 errors found:
File: C:Usersexercise_4_5.java  [line: 19]
Error: variable day is already defined in method main(java.lang.String[])
File: C:Userscode.java  [line: 22]
Error: variable day is already defined in method main(java.lang.String[])
File: C:Userscode.java  [line: 25]
Error: variable day is already defined in method main(java.lang.String[])
File: C:Userscode.java  [line: 28]
Error: variable day is already defined in method main(java.lang.String[])
File: C:Userscpde.java  [line: 31]
Error: variable day is already defined in method main(java.lang.String[])
File: C:Userscode.java  [line: 34]
Error: variable day is already defined in method main(java.lang.String[])
File: C:Userscode.java  [line: 55]
Error: variable day2 is already defined in method main(java.lang.String[])
File: C:Userscode.java  [line: 58]
Error: variable day2 is already defined in method main(java.lang.String[])
File: C:Userscode.java  [line: 61]
Error: variable day2 is already defined in method main(java.lang.String[])
File: C:Userscode.java  [line: 64]
Error: variable day2 is already defined in method main(java.lang.String[])
File: C:Userscode.java  [line: 67]
Error: variable day2 is already defined in method main(java.lang.String[])
File: C:Userscode.java  [line: 70]
Error: variable day2 is already defined in method main(java.lang.String[])
File: C:Userscode.java  [line: 75]
Error: cannot find symbol
  symbol:   variable day
  location: class code
File: C:UsersDesktopcode.java  [line: 75]
Error: cannot find symbol
  symbol:   variable day2
  location: class code

我对编程很陌生,Java是我的第一语言。任何帮助和修复将不胜感激。提前谢谢你。

import java.util.Scanner;

/**
 *
 * @author wathsara
 */
public class Code {

    public static void main (String[] args)
    {
        String day="",day2="";
        Scanner scanner = new Scanner(System.in);
        System.out.println("Enter today's day:");
        int num = scanner.nextInt();
        if(num > 6 && num < 0) {
            System.out.println("This is an invalid number");
        }
        switch(num) {
            case 0:
                day = "Sunday";
                break;
            case 1:
                day = "Monday";
                break;
            case 2:
                day = "Tuesday";
                break;
            case 3:
                day = "Wednesday";
                break;
            case 4:
                day = "Thursday";
                break;
            case 5:
                day = "Friday";
                break;
            case 6:
                day = "Saturday";
                break;
        }
        Scanner scanner2 = new Scanner(System.in);
        System.out.println("Enter the number of days elapsed since today:");
        int num2 = scanner2.nextInt();

        int newday = num + num2;
        while(newday > 6) {
            newday = newday - 7;
        }
        switch(newday) {
            case 0:
                day2 = "Sunday";
                break;
            case 1:
                day2 = "Monday";
                break;
            case 2:
                day2 = "Tuesday";
                break;
            case 3:
                day2 = "Wednesday";
                break;
            case 4:
                day2 = "Thursday";
                break;
            case 5:
                day2 = "Friday";
                break;
            case 6:
                day2 = "Saturday";
                break;
        }

        System.out.println("Today is " + day + " and the future day is " + day2);
    }
}

试试上面的代码。 问题是你声明了一个字符串变量 day 6 次,字符串变量 day2 6 次,这就是代码没有执行的原因。

在我看来,您的解决方案不是很有效。这是关于算法,而不是Java语言本身。试试这个:

  • 一次接收 2 个输入。
  • 初始化从星期日 (索引:0( 到星期六 (索引: 6( 的数组或列表
  • 将这两个输入相加,并在将其除以 7 时取余数。我希望余数的结果是从 0 到 6
  • 获取数组在余数索引处
  • 的值

关系,这是一个简单的修复。我在开关案例语句外部而不是内部声明了变量"day"和"day2"。

import java.util.Scanner;
public class exercise_4_5
{
    public static void main (String[] args)
    {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Enter today's day:");
        int num = scanner.nextInt();
        
        if(num > 6 || num < 0) {
            System.out.println("This is an invalid number");
        }
        
        String day = "Invalid";
        
        switch(num) {
            case 0:
                day = "Sunday";
                break;
            case 1:
                day = "Monday";
                break;
            case 2:
                day = "Tuesday";
                break;
            case 3:
                day = "Wednesday";
                break;
            case 4:
                day = "Thursday";
                break;
            case 5:
                day = "Friday";
                break;
            case 6:
                day = "Saturday";
                break;
        }
        
        Scanner scanner2 = new Scanner(System.in);
        System.out.println("Enter the number of days elapsed since today:");
        int num2 = scanner2.nextInt();
        
        
        
        int newday = num + num2;
        
        while(newday > 6) {
            newday = newday - 7;
        }
        
        String day2 = "Invalid";
        
        switch(newday) {
            case 0:
                day2 = "Sunday";
                break;
            case 1:
                day2 = "Monday";
                break;
            case 2:
                day2 = "Tuesday";
                break;
            case 3:
                day2 = "Wednesday";
                break;
            case 4:
                day2 = "Thursday";
                break;
            case 5:
                day2 = "Friday";
                break;
            case 6:
                day2 = "Saturday";
                break;
        }
            
        
        System.out.println("Today is " + day + " and the future day is " + day2);
    }
}

在开关外的每个开关案例中声明这些字符串变量,并在第 1 天和第 2 天创建,它将起作用。

有很多事情会使你的代码效率非常低下。以下是一些改进

  1. 所有重复的代码都应该在一个函数中。获取数字并获取日期的代码应该是不同的函数(切换大小写(。

  2. 使用 % (Mod( 运算符获取 newDay 的日期,而不是 while 循环。 newDay = (num1 + num2)%7

  3. 您可以使用地图代替开关盒。

  4. String dayString day2的范围仅限于开关外壳内部,不能在开关外壳外使用。在外部声明变量,只需更改 switch 语句中的值。

    import java.util.HashMap;
    import java.util.Scanner;
    import java.util.Map;
    class Ideone {
    
        private static String getDay(int num){
            Map<Integer, String> days = new HashMap<Integer, String>();
            days.put(0, "Sunday");
            days.put(1, "Monday");
            days.put(2, "Tuesday");
            days.put(3, "Wednesday");
            days.put(4, "Thursday");
            days.put(5, "Friday");
            days.put(6, "Saturday");
            return days.get(num);
        }
        public static void main(String[] args){
            Scanner scanner = new Scanner(System.in);
            System.out.println("Enter today's day: ");
            int num = scanner.nextInt();
            System.out.println("Enter the number of days elapsed since today: ");
            int num2 = scanner.nextInt();
            if (num < 0 || num > 6){
                System.out.println("Invalid Number");
                System.exit(0);
            }
            int newDay = (num + num2) % 7;
            System.out.println("Today is " + getDay(num) + " and the future day is " + getDay(newDay));
        }
    }
    

最新更新