Java 开关不工作

标签 java loops switch-statement

我的开关工作时遇到问题。我得到一个无法编译的源代码 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);
  } 

最佳答案

您正在传递整数并检查字符。 1int,而 '1' 是 java 中的字符。

在您的代码中 menuint 而不是 char 因此您的情况应该是 case 1: 而不是 案例'1':

所以改变你的开关

 switch(menu){
      case 1:
      //Your code
      break;

      case 2:
      //Your code
      break;
      //..And so on
  }

现在,字符 '1','2'..ASCII 值与作为 传递的 int 值进行比较menu 显然不会等于 char '1'ASCII 值为 8182'2' 因此在这种情况下它完全没有用。

关于Java 开关不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26220667/

相关文章:

C++:在开关中调用类函数

ios - 用于开关文本字段的maxLength

java - application.properties 中的注释

java - AtomicInteger 在 JUnit 测试中不会增加

python - 如何在重复数字的python中创建矩阵?

java - while 循环在我的代码中没有退出

java - NoClassDefFoundError Singletonholder

java.net.SocketException : Too many open files 异常

java - 循环遍历随机字母而不重复

java - Java 中的数字到单词的转换