【问题标题】:java switch statement with empty string带有空字符串的java switch语句
【发布时间】:2019-02-16 13:27:04
【问题描述】:

我必须根据对象的区域、leftborder 或 lowerborder 对对象进行排序。当我想在它们的左边界或下边界对它们进行排序时,我必须说 sort x 和 sort y。当我想按区域排序时,我需要说只是排序。我试图通过 switch 方法执行此操作,但我不知道如何使用其中包含空字符串的 switch 方法。这就是我想要做的:

case "sort":
  System.out.println("On what do you want to sort?");
  String choice = scanner.nextLine();
  switch (choice) {
    case "x":
      Arrays.sort(g, 0, lastPos, new Comparator < Geometric > () {
        @Override
        public int compare(Geometric o1, Geometric o2) {
          if (o1.leftBorder() < o2.leftBorder()) {
            return -1;
          } else if (o1.leftBorder() > o2.leftBorder()) {
            return 1;
          } else {
            return 0;
          }
        }

      });
      break;
    case "y":
      Arrays.sort(g, 0, lastPos, new Comparator < Geometric > () {
        @Override
        public int compare(Geometric o1, Geometric o2) {
          if (o1.bottomBorder() < o2.bottomBorder()) {
            return -1;
          } else if (o1.bottomBorder() > o2.bottomBorder()) {
            return 1;
          } else {
            return 0;
          }
        }

      });
      break;
    case (""):
      Arrays.sort(g, 0, lastPos, new Comparator < Geometric > () {
        @Override
        public int compare(Geometric o1, Geometric o2) {
          if (o1.area() < o2.area()) {
            return -1;
          } else if (o1.area() > o2.area()) {
            return 1;
          } else {
            return 0;
          }
        }

      });
      break;
    default:
      System.out.println("test1");
  }

【问题讨论】:

  • 代码有点乱,但是空字符串切换分支还行。
  • 开关没问题,但我会删除括号。那么你真正的问题是什么 - 一些错误,一些奇怪的行为或......?
  • 为了更好的代码,我建议使用枚举并在其中编写方法
  • 也许您可以将choice 转换为字符。然后将其转换为 int 并比较字符代码。也许你得到的是回车或换行之类的东西。stackoverflow.com/a/20250062/495157

标签: java string switch-statement


【解决方案1】:

订购代码的更好方法(例如使用工厂作为比较器)但只是坚持您的代码,我认为 ENUM 可以解决您的问题。

public enum CHOICES {
    X, Y, AREA
}

private static CHOICES getChoice(String choice) {
    if (choice == null || choice.trim().length() == 0) {
        return CHOICES.AREA; 
    }
    try {
        return CHOICES.valueOf(choice.toUpperCase());   
    } catch (Exception e) {
        // instead to check the value, 
        // if the input fir on, if not just catch the exception and return null
        return null;
    }       
}

然后你可以像下面这样更换你的开关

        //String choice = scanner.nextLine();
    CHOICES choice = getChoice(scanner.nextLine());     
    switch (choice) {       
    case X:
        //sort by X
        break;
    case Y:
        //sort by Y
        break;
    case AREA:
        //sort by area
        break;
    default:
        System.out.println("test1");
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    相关资源
    最近更新 更多