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