【问题标题】:Using a loaded String in a case statment在 case 语句中使用加载的字符串
【发布时间】:2015-11-24 21:03:05
【问题描述】:

我在加载字符串时遇到问题:

    public  void loadGameDataFromFile() {   
    try 
    {
        FileInputStream saveFile = new FileInputStream("SaveObj.sav");  
    ObjectInputStream objectStream = new ObjectInputStream(saveFile);   
     place = (String) objectStream.readObject(); // place is a string //defined at the start of my class
    objectStream.close();
    saveFile.close();
    System.out.println(place);
    }catch(Exception e)
        {
        e.printStackTrace(System.out);
        }

}

像这样加载字符串后,我尝试使用一个案例并出现问题。在我看来,它并没有像应有的那样比较它们。

那是switch语句的代码:

 public enum Places
    {
    Anfang,
    Strand,
    Wald, Waldex, Berg, Höhle, Höhlet, Haus1, Haus2, Haus3, Haus4, Strandex,        Höhlett, Kampf, Lichtung, Wald2, Fuß, Bergm, Spitze, Keller, Strand2, Strandx2, Gespräch,Höhlettt   //this are the Strings which my String "place" can be...
    }

public void actionPerformed( ActionEvent evt)
  {

       Places replace = Places.valueOf(place);
       switch(replace)
        {
        case Anfang: //do my stuff 
         break;
        case Strand: //do my stuff 
         break;
        case Wald: //do my stuff
         break;
        }
   }

这个问题只有在加载后使用字符串时才会出现。当我在不加载字符串的情况下启动它时,它就可以正常工作。

当我删除枚举并在 switch 语句中只使用我的字符串时,它有同样的问题,它似乎不理解字符串等于其中一种情况。

更新: 问题仍然存在,我可以将我的情况更改为 if else 但这将退出解决问题。

【问题讨论】:

  • 这段代码真的很难阅读,因为它没有使用标准的 Java 约定:变量应该以小写字母开头,理想情况下,枚举常量应该全大写。 Place 是用来上课的吗?一个变量?它的类型是什么?
  • 到底是什么问题?它期望做什么以及实际做什么?
  • 您可以在加载中看到 Place 是我的字符串....而约定是经常被忽略的东西...抱歉。
  • 开关用于显示由字符串决定的位置不同的文本,但是在我加载字符串后它不再起作用......我已经尝试用枚举修复它,但它仍然相同问题。
  • String 的大小写是否正确?例如安芳而不是安芳?另外,在switch 语句之前检查places 的值是什么。

标签: java string enums switch-statement loading


【解决方案1】:

这个方法有什么问题:

public  String loadGameDataFromFile() {   
try 
{
    FileInputStream saveFile = new FileInputStream("SaveObj.sav");  
ObjectInputStream objectStream = new ObjectInputStream(saveFile);   
String place = (String) objectStream.readObject();
objectStream.close();
saveFile.close();
return place; // return the string
}catch(Exception e)
    {
    e.printStackTrace(System.out);
    return "";
    }
}
public void main(String arg[]){
    String place = loadGameDataFromFile();
    // instead of unnecessary switch case...
    if(place.equals("something")){
    }else if(place.equals("something else")){
    ...
    }else if(...){
    ...
    }
}

Java SE 7 的另一种方法:

    String string = loadGameDataFromFile();;
    switch(string){
    case "A":
    case "B":
        break;
    }

【讨论】:

  • 仍然是同样的问题......就像在读取正确的字符串之前所做的那样,
  • 您想复制确切的字符串输出并在此处发布吗?就在开关盒之前
猜你喜欢
  • 2017-01-08
  • 2013-01-09
  • 1970-01-01
  • 1970-01-01
  • 2014-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多