Java:有什么方法可以改进这段代码吗

Java:有什么方法可以改进这段代码吗,java,Java,我的java文件中有这种编码。 这段代码基本上接收int值并为对象设置char值 Student st = new Student(); if (attributeName.equals("Grade")) { int sidevalue = Integer.parseInt(attribute.getValue()); // This returns an int value , and this value needs to be converted into char late

我的java文件中有这种编码。 这段代码基本上接收int值并为对象设置char值

Student st = new Student();

if (attributeName.equals("Grade")) {
    int sidevalue = Integer.parseInt(attribute.getValue());  // This returns an int value , and this value needs to be converted into char later as shown 
    if(sidevalue==1)
        st.grade=1;
    else if(sidevalue==2)
        st.grade=2;
    else if(sidevalue==5)
        st.grade=3;
}


class Student
{
    char grade ;
}

查看控制关键字
开关
。这将在一定程度上缓解这种编码风格。

一个
开关
大小写
语句可以避免多次
if
else
缩进

switch(sidevalue){

   case 1: st.grade = 1;
            break;
   case 2: st.grade = 2;
            break;
   case 5: st.grade = 3;
            break;
   default: break;
}
运行
if-else
switch
之间没有显著的执行差异。 观察到的差异可能是由于您正在运行的特定代码的样本空间造成的

在您提供的小代码片段中,除了
switch
语句提供了更好的可读性之外,没有最佳选择

查看这些链接以了解更多详细信息:


    • 改进此代码的最佳方法是为其编写测试

      这个阶段的问题:“等级”应该是私人的。 等级可能是一级对象。
      你打算如何支持其他年级?说4还是6?如果sidevalue返回的值无效怎么办?

      您可以使用映射

      Map<Integer, Integer> gradeMappings = new HashMap<Integer, Integer>();
      gradeMappings.put(1,1);
      gradeMappings.put(2,2);
      gradeMappings.put(3,5);
      
      if (attributeName.equals("Grade")) {
          int sidevalue = Integer.parseInt(attribute.getValue());
          st.grade = gradeMappings.get(sidevalue);
      }
      
      Map gradeMappings=newhashmap();
      gradeMappings.put(1,1);
      gradeMappings.put(2,2);
      放(3,5);
      if(属性名称等于(“等级”)){
      int sidevalue=Integer.parseInt(attribute.getValue());
      st.grade=gradeMappings.get(sidevalue);
      }
      
      在现实生活中,如果属性值不是映射中的键,则需要添加一些异常检查。您还可以使用默认行为将解析的属性值用作等级,并且仅当地图中存在适当的条目时才覆盖该值。

      • Integer.parseInt
        如果属性名称不是数字,则引发异常。抓住它并处理错误
      • Student
        类应该公开,并转到一个单独的java文件
      • grade
        字段应该是一个
        int
        (你通过的号码)
      • 或者-如果您需要存储字符,您可能必须说
        st.grade='1'(传递
        '1'
        而不是
        0x01
      • grade
        字段应该是私有的,使用
        getGrade
        setGrade
        方法读取和写入属性
      • 我不理解“边值”的含义——如果它在域上下文中没有一个众所周知的含义,那么考虑重命名它。
      • 局部变量
        st
        应重命名为
        student
      • if-else-if
        链可以由
        开关盒
        语句替换
        • 1)开始使用编码格式。建议使用objStudent而不是一些“st”

          2) 创建int-sidevalue是没有用的。直接使用开关箱,如下所示:

          switch(Integer.parseInt(attribute.getValue()))
          {
            case 1:
              ----
          .
          .
          .
          
          等等

          }
          

          其他人建议进行一些小的语法更改(这可能会有帮助),但我认为您最好从面向对象的角度来考虑这一点,将此逻辑封装到学生类本身,这样您只需要编写一次。如果不同的场景需要不同的逻辑,则始终可以使用继承和重写setGrade

          Student st = new Student();
          st.setGrade(Integer.parseInt(attribute.getValue()))
          
          class Student{
              private char grade ;
          
              public setGrade(int sidevalue){
                  if(sidevalue==1)
                      grade=1;
                  else if(sidevalue==2)
                      grade=2;
                  else if(sidevalue==5)
                      grade=3;
                  else
                      throw new IllegalArgumentException();
              }
          
              public char getGrade(){ 
                  return grade; 
              }
          }
          

          如果在attribute.getValue()中存储了规范字符串值,则可以删除整数解析,只需比较字符串值

          String sidevalue=attribute.getValue()
          
          if(sidevalue=="1"){
          
          }else if(sidevalue=="2"){
          
          }...
          

          有关详细信息,请参阅String.intern方法。这将有助于提高程序的性能。

          请正确格式化程序。请发布完整的源代码。。你可能会得到更好的反馈。我认为“objStudent”一点也不可取。应该不鼓励使用这种匈牙利符号。我从鼓励使用这种符号的网站上学到了这种符号,这样就不会对类的对象产生任何歧义。你能给我看一个上面有这样描述的网站吗。如果我在命名类对象方面一直出错,我宁愿纠正自己。希望你能说出你评论的理由,否则你为什么要发布它?用一些这样的网站来支持你的说法。@Ajj:
          你能给我看一个上面写有
          的网站吗?你需要看看其他网站。不推荐使用匈牙利符号。非常感谢,如果有其他方法可以提高性能,请告诉我是否正在使用切换??