for(int x = 0;x<14;x++){
day[x]= theSheet.changeLetters(day[x]);
}
public String changeLetters(String entering){
if(entering.equalsIgnoreCase("a")){
entering = "10";
} else {
if(entering.equalsIgnoreCase("b")){
entering = "11";
} else {
if(entering.equalsIgnoreCase("c")){
entering = "12";
} else {
if(entering.equalsIgnoreCase("d")){
entering = "13";
} else {
if(entering.equalsIgnoreCase("e")){
entering = "14";
} else {
if(entering.equalsIgnoreCase("f")){
entering = "15";
} else {
if(entering.equalsIgnoreCase("g")){
entering = "16";
} else {
if(entering.equalsIgnoreCase("h")){
entering = "17";
}
}
}
}
}
}
}
}
return entering;
}
说错误在if(entering.equalsIgnoreCase("a"))
,在我用来运行方法的for循环中。我正在尝试将放入字符串的字母更改为数字。
任何人都可以向我解释错误的位置吗?我发现问题时遇到了麻烦。它让我输入字母很好但是一旦它到达for循环并运行这个方法就有一个例外。
答案 0 :(得分:4)
为什么不使用
if (condition) {
// ...
} else if (condition2) {
// ...
} else if (condition3) {
// ...
}
// and so on
使您的代码更具可读性。你的嵌套条件是一团糟。如果您修复它们,您也可以修复错误(如果它出现在您向我们展示的代码部分中)。
同时添加
System.out.println("Entering = '" + entering "'");
在您的方法的开头,看看是否真的收到了您期望收到的内容。
答案 1 :(得分:3)
根据
确定是的,代码在使用之前在for循环中初始化 for(int x = 1; x&lt; 8; x ++){day [x-1] = JOptionPane.showInputDialog(“Enter 日期的小时对“+ x +”。\ n输入第一个数字:“);日[x] = JOptionPane.showInputDialog(“输入第二个数字:”); } 这些信 然后使用for将数组放入数组中 循环发布。
您有逻辑错误。您正在覆盖以前的条目,而不是最多填充14个项目。因此,8
之后的项目会留下null
,因此NullPointerException
。
试试这个:
String[] day = new String[14];
for( int i = 0; i < 14; i+=2 ) {
day[i] = JOptionPane.showInputDialog("Enter hour pairs for day "+(i/2+1) +".\n Enter the first digit: ");
day[i+1] = JOptionPane.showInputDialog("Enter the second digit: ");
}
作为奖励,您可以使用以下内容简化if-else代码:
public String changeLetters( String entering ) {
return String.valueOf(entering.toUpperCase().charAt(0) - 55);
}
答案 2 :(得分:0)
正如@jlordo已经说过的那样,避免使用具有这种深度的嵌套if语句。
作为替代方案,您可以将switch语句与enum
组合使用 - 尽管以下方法包含更多代码,但它更通用且更适合扩展(例如使用字母表中的所有字母)并且它将使代码更具可读性,更适合于你想表达的内容。
Letter letter;
if (letter.equals("a")) letter = Letter.a;
if (letter.equals("A")) letter = Letter.A;
// and so on ...
switch (letter) {
case a : {
// do some code here ...
break;
}
case A : {
// do some code here ...
break;
}
// and so on ...
}
public enum Letter {
a (1),
A (2),
b (3),
B (4),
c (5),
C (6);
// and so on
private final int index;
Letter(int i) {
index = i;
}
public int getIndex () {
return index;
}
}
请注意,如果您使用的是Java 7,即使没有枚举也可以使用switch
语句,因为它接受字符串,如下所示:
switch (entering) {
case "a" : {
// ...
}
// ...
}