我的开关工作时遇到问题。我得到一个无法编译的源代码 Date.java:75。另外,当程序返回结果时 - 我希望它也返回月份名称 DD、YYYY 以及我已经执行的 MM/DD/YYYY。如果您能指出正确的方向,我将不胜感激。
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Scanner;
public class Date {
private GregorianCalendar date = null;
private String[] months = new String[]{ "january", "february", "march", "april", "may",
"june", "july", "august", "september", "october", "november", "december" };
public Date(int month, int day, int year) {
date = new GregorianCalendar(year, month-1, day);
}
public Date(String month, int day, int year) {
date = new GregorianCalendar(year, this.getMonth(month), day);
}
public Date(int dayOfYear, int year) {
date = new GregorianCalendar();
date.set(Calendar.DAY_OF_YEAR, dayOfYear);
date.set(Calendar.YEAR, year);
}
private int getMonth(String month) {
for (int i=0; i<months.length; ++i)
if (month.toLowerCase().equals(months)) //equals(months))
return i;
return 0;
}
public String toString() {
return date.get(Calendar.MONTH)+1 + "-" + date.get(Calendar.DATE) + "-" + date.get(Calendar.YEAR);
}
public static void main(String[] args) {
int mo;
int dy;
int yr;
String moo; // Month name string
boolean wrongInput = false;
do {
Scanner input = new Scanner( System.in ); // scanner to read input
wrongInput = false;
int menu = input.nextInt(); // menu selection
System.out.printf( "Enter 1 for format: MM/DD/YYYY \n");
System.out.printf( "Enter 2 for format: Month DD,YYYY \n");
System.out.printf( "Enter 3 to exit \n");
System.out.printf( "Choice:");
switch(menu)
{
case '1' : // MM/DD/YYYY UI
System.out.printf( "Enter Month (1-12): ");
mo = input.nextInt();
System.out.printf( "Enter Day of Month: ");
dy = input.nextInt();
System.out.printf( "Enter Year: ");
yr = input.nextInt();
Date a = new Date(mo, dy, yr); //chew
System.out.println(a); //spit
break;
case '2' : // Month DD,YYYY UI
System.out.printf( "Enter Month name: ");
moo = input.next();
System.out.printf( "Enter Day of Month: ");
dy = input.nextInt();
System.out.printf( "Enter Year: ");
yr = input.nextInt();
Date b = new Date(moo, dy, yr); //chew
System.out.println(b); //spit
break;
case '3' : // EOP
System.exit(0);
break;
default:
System.out.println("Invalid selection.");
wrongInput = true;
break;
}
while(wrongInput);
}
最佳答案
您正在传递整数并检查字符。 1
是 int
,而 '1'
是 java 中的字符。
在您的代码中 menu
是 int
而不是 char
因此您的情况应该是 case 1:
而不是 案例'1':
所以改变你的开关
switch(menu){
case 1:
//Your code
break;
case 2:
//Your code
break;
//..And so on
}
现在,字符 '1','2'..
的 ASCII
值与作为 传递的
显然不会等于 char int
值进行比较menu'1'
的 ASCII
值为 81
而 82
为 '2'
因此在这种情况下它完全没有用。
关于Java 开关不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26220667/