我在java文件中有这个编码。 此代码基本上接收int值并为Object
设置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 ;
}
答案 0 :(得分:4)
Integer.parseInt
会抛出异常。抓住它并处理错误。Student
类应该公开并转到单独的java文件grade
字段应为int
(您的通过号码)st.grade = '1';
(传递'1'
而不是0x01
)grade
字段应该是私有的,使用getGrade
和setGrade
方法来读取写入属性st
重命名为student
if-else-if
链可以替换为switch-case
语句。答案 1 :(得分:3)
您可以使用地图
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);
}
在现实生活中,您希望在属性值不是地图中的键时添加一些异常检查。您还可以使默认行为使用已解析的属性值作为等级,并且只有在地图中存在适当的条目时才覆盖该值。
答案 2 :(得分:2)
switch
case
check here声明可以避免多次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
语句提供更高的可读性之外,没有最佳选择。
请查看以下链接以获取更多详细信息:
答案 3 :(得分:1)
查看控制关键字switch
。这将有点缓解这种编码风格。
答案 4 :(得分:1)
改进此代码的最佳方法是为其编写测试。
现阶段的问题:'成绩'应该是私密的。 等级可能是头等对象 你打算如何支持其他年级?说4或6?如果sidevalue返回无效值会发生什么?
答案 5 :(得分:0)
其他人提出了一些小的语法更改(这可能会有所帮助),但我认为你最好在面向对象的意义上考虑这一点,将这个逻辑封装到学生类本身,这样你只需要编写它一旦。如果您需要针对不同场景使用不同的逻辑,则可以始终使用继承并覆盖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;
}
}
答案 6 :(得分:0)
如果您在attribute.getValue()中存储了规范的String值,那么您可以删除整数解析并简单地比较字符串值
String sidevalue=attribute.getValue()
if(sidevalue=="1"){
}else if(sidevalue=="2"){
}...
有关更多详细信息,请参阅String.intern方法。这有助于提高程序的性能。
答案 7 :(得分:-1)
1)开始使用编码格式。建议使用 objStudent 而不是某些'st'。
2)没有使用创建 int sidevalue 。直接使用开关盒,如下所示:
switch(Integer.parseInt(attribute.getValue()))
{
case 1:
----
.
.
.
依旧......
}