Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 日历计算问题_Java_Calendar_String Formatting - Fatal编程技术网

Java 日历计算问题

Java 日历计算问题,java,calendar,string-formatting,Java,Calendar,String Formatting,我的代码是贝娄,问题是我需要它能够使日历,无论用户说什么,它都是真实的,因此,如果用户说我希望它在1776年的星期一开始,那么它将为此工作。它现在的工作原理是,它只能从星期天开始,每个月从星期天开始,所以如果前一个月在星期一结束,日历应该从下一个月的星期二开始,但它会返回到星期天,如果这是用户输入的内容,有人对此进行了修复吗 package calendaryear; import java.util.Scanner; public class calendaryear { /** * @p

我的代码是贝娄,问题是我需要它能够使日历,无论用户说什么,它都是真实的,因此,如果用户说我希望它在1776年的星期一开始,那么它将为此工作。它现在的工作原理是,它只能从星期天开始,每个月从星期天开始,所以如果前一个月在星期一结束,日历应该从下一个月的星期二开始,但它会返回到星期天,如果这是用户输入的内容,有人对此进行了修复吗

package calendaryear;
import java.util.Scanner;
public class calendaryear {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    String month;
    String day;
    Scanner userinput = new Scanner(System.in);
    //enter the day!
    System.out.print("Enter day [0 is for Sunday, 1 is for moneday continued]:");
    int d = userinput.nextInt();
    //enter a year!
    System.out.print("Enter a year:");
    int y = userinput.nextInt();
    // for loop for 12 months!
    for (int m = 1; m <= 12; m++){
        switch (m) {
            case 1:
                month = "\n\t January";
                break;
            case 2:
                month = "\n\t February";
                break;
            case 3:
                month = "\n\t March";
                break;
            case 4:
                month = "\n\t April";
                break;
            case 5:
                month = "\n\t May";
                break;
            case 6:
                month = "\n\t June";
                break;
            case 7:
                month = "\n\t July";
                break;
            case 8:
                month = "\n\t August";
                break;
            case 9:
                month = "\n\t September";
                break;
            case 10:
                month = "\n\t October";
                break;
            case 11:
                month = "\n\t November";
                break;
            case 12:
                month = "\n\t December";
                break;
            default:
                month ="";
                }

        System.out.printf("%" + (34 + month.length()) / 2 + "s %s\n", month, y);
        System.out.println(String.format("%39S", "").replace(' ', '-'));
        System.out.printf("%-6s%-6s%-6s%-6s%-6s%-6s%-6s\n", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat");

        int l = 30 + ((m + (int)(m / 8.0)) % 2);
        if (m == 2) {
            if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0)){
                l = 29;
            }else {
                l = 28;
            }
        }
        d = (d) % 7;
        switch (d) {
            case 0:
                day = "Sunday";
                break;
            case 1:
                day = "Moneday";
                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;
            default:
                day = "";
        }
        if (d != 0) {
            System.out.print(String.format("%" + 6 * d + "s", ""));

        }

for (int i = 1; i <= l; i++)
{
System.out.printf("%-6d", i);
if (i % 7 == 0)  //<-- this part 
{
   System.out.println();
}
day += 1;
}
        System.out.print("");


    }
}

}
package日历年;
导入java.util.Scanner;
公课日历年{
/**
*@param指定命令行参数
*/
公共静态void main(字符串[]args){
弦月;
弦日;
扫描仪用户输入=新扫描仪(System.in);
//进入新的一天!
System.out.print(“输入日期[0表示星期日,1表示星期日]:”;
int d=userinput.nextInt();
//进入一年!
System.out.print(“输入年份:”);
int y=userinput.nextInt();
//循环12个月!

对于(int m=1;m而言,您的逻辑部分正确。存在一些问题:

  • 为了简化,我用计数器替换了模数(%)运算符
  • day+=1
    不正确。这是串联的。是否希望
    d+=1
  • 在打印第1天之前,您需要打印正确的空白天数
下面是正确的程序:

    public static void main(String[] args) {
    String month;
    String day;
    Scanner userinput = new Scanner(System.in);
    //enter the day!
    System.out.print("Enter day [0 is for Sunday, 1 is for moneday continued]:");
    int d = userinput.nextInt();
    //enter a year!
    System.out.print("Enter a year:");
    int y = userinput.nextInt();
    // for loop for 12 months!
    for (int m = 1; m <= 12; m++){
        switch (m) {
        case 1:
            month = "\n\t January";
            break;
        case 2:
            month = "\n\t February";
            break;
        case 3:
            month = "\n\t March";
            break;
        case 4:
            month = "\n\t April";
            break;
        case 5:
            month = "\n\t May";
            break;
        case 6:
            month = "\n\t June";
            break;
        case 7:
            month = "\n\t July";
            break;
        case 8:
            month = "\n\t August";
            break;
        case 9:
            month = "\n\t September";
            break;
        case 10:
            month = "\n\t October";
            break;
        case 11:
            month = "\n\t November";
            break;
        case 12:
            month = "\n\t December";
            break;
        default:
            month ="";
        }

        System.out.printf("%" + (34 + month.length()) / 2 + "s %s\n", month, y);
        System.out.println(String.format("%39S", "").replace(' ', '-'));
        System.out.printf("%-6s%-6s%-6s%-6s%-6s%-6s%-6s\n", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat");

        int l = 30 + ((m + (int)(m / 8.0)) % 2);
        if (m == 2) {
            if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0)){
                l = 29;
            }else {
                l = 28;
            }
        }
        //d = (d) % 7;  ***** REMOVED *****
        switch (d) {
        case 0:
            day = "Sunday";
            break;
        case 1:
            day = "Moneday";
            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;
        default:
            day = "";
        }
        if (d != 0) {
            //System.out.print(String.format("%" + 6 * d + "s", ""));   ***** REMOVED *****

        }

        /* print leading blank days (if any) */
        int daysprinted = 0;
        for (int k = 0; k < d; k++) {
            System.out.printf("%-6s", "");
            daysprinted++;
        }

        for (int i = 1; i <= l; i++)
        {
            System.out.printf("%-6d", i);
            daysprinted++;

            if (daysprinted == 7)  //<-- this part   ***** CHANGED *****
            {
                System.out.println();
                daysprinted = 0;
            }

            d += 1;     //***** day += 1 is INCORRECT; use d here *****
            if (d > 6)
                d = 0;  //WRAP AROUND

        }
        System.out.print("");
    }
}
publicstaticvoidmain(字符串[]args){
弦月;
弦日;
扫描仪用户输入=新扫描仪(System.in);
//进入新的一天!
System.out.print(“输入日期[0表示星期日,1表示星期日]:”;
int d=userinput.nextInt();
//进入一年!
System.out.print(“输入年份:”);
int y=userinput.nextInt();
//循环12个月!
对于(int m=1;m