java.lang.ArrayIndexOutOfBoundsException 为什么我会收到这个
java.lang.ArrayIndexOutOfBoundsException why am i getting this
为什么我会收到异常错误
va.lang.ArrayIndexOutOfBoundsException为什么我会得到这个va.lang.ArrayIndexOutOfBoundsException为什么我会得到这个va.lang.ArrayIndexOutOfBoundsException为什么我会得到这个va.lang.ArrayIndexOutOfBoundsException为什么我会得到这个va.lang.ArrayIndexOutOfBoundsException我为什么会收到这个va.lang.ArrayIndexOutOfBoundsException 为什么我会收到这个va.lang.ArrayIndexOutOfBoundsException 为什么我会收到这个va.lang.ArrayIndexOutOfBoundsException 为什么我会收到这个va.lang.ArrayIndexOutOfBoundsException 为什么我会收到这个va.lang.ArrayIndexOutOfBoundsException为什么我得到这个va.lang.ArrayIndexOutOfBoundsException 为什么我得到这个
}
在你的比较中,你试图将单个字符与一个范围进行比较,这是你不能像 Java 中那样写的东西。你的语法看起来更接近正则表达式 ([a-zA-Z]
) 而不是适当的 Java 比较。
如果你想检查一个变量的值是否在一个范围内,你需要比较它和它的边界:大于或等于左边,小于或等于右边。
public static boolean isValidChar_Q1(char chr) {
return (chr >= 'a' && chr <= 'z') || (chr >= 'A' && chr <= 'Z');
}
语法if(chr == 'a'-'z')
不正确。 'a'
和 'z'
都是字符文字,但在 Java 中,字符是 16 位整数类型。所以'a'-'z'
写的很长-25
。我会简化逻辑和测试。像
public static boolean isValidChar_Q1(char chr) {
char t = Character.toLowerCase(chr);
return t >= 'a' && t <= 'z';
}
你写的'a'-'z'
会转换成ASCII码减法,结果会是-25
,而你的'A'-'Z'
语句,结果会是(嗯,也是) -25
.
你应该这样写
if( (chr <= 'z' && chr >= 'a') || (chr <= 'Z' && chr >= 'A') )
return true;
return false;
永远记住,计算机使用 ASCII 代码,而不是“字符”,计算机将检查有效代码给定字符(总是正,-25
无效),在我们的例子中,chr
的ASCII码应该是smaller-or-equal到z
,依此类推(参见上面的 if-statement)。
如果您熟悉重载 return
语句,您还可以简化您的函数(使其更具可读性):
return (chr >= 'a' && chr <= 'z') || (chr >= 'A' && chr <= 'Z')
使用正则表达式的解决方案:
import java.util.regex. * ;
boolean isMatch = Pattern.matches("[a-zA-Z]", "S");
为什么我会收到异常错误
va.lang.ArrayIndexOutOfBoundsException为什么我会得到这个va.lang.ArrayIndexOutOfBoundsException为什么我会得到这个va.lang.ArrayIndexOutOfBoundsException为什么我会得到这个va.lang.ArrayIndexOutOfBoundsException为什么我会得到这个va.lang.ArrayIndexOutOfBoundsException我为什么会收到这个va.lang.ArrayIndexOutOfBoundsException 为什么我会收到这个va.lang.ArrayIndexOutOfBoundsException 为什么我会收到这个va.lang.ArrayIndexOutOfBoundsException 为什么我会收到这个va.lang.ArrayIndexOutOfBoundsException 为什么我会收到这个va.lang.ArrayIndexOutOfBoundsException为什么我得到这个va.lang.ArrayIndexOutOfBoundsException 为什么我得到这个
}
在你的比较中,你试图将单个字符与一个范围进行比较,这是你不能像 Java 中那样写的东西。你的语法看起来更接近正则表达式 ([a-zA-Z]
) 而不是适当的 Java 比较。
如果你想检查一个变量的值是否在一个范围内,你需要比较它和它的边界:大于或等于左边,小于或等于右边。
public static boolean isValidChar_Q1(char chr) {
return (chr >= 'a' && chr <= 'z') || (chr >= 'A' && chr <= 'Z');
}
语法if(chr == 'a'-'z')
不正确。 'a'
和 'z'
都是字符文字,但在 Java 中,字符是 16 位整数类型。所以'a'-'z'
写的很长-25
。我会简化逻辑和测试。像
public static boolean isValidChar_Q1(char chr) {
char t = Character.toLowerCase(chr);
return t >= 'a' && t <= 'z';
}
你写的'a'-'z'
会转换成ASCII码减法,结果会是-25
,而你的'A'-'Z'
语句,结果会是(嗯,也是) -25
.
你应该这样写
if( (chr <= 'z' && chr >= 'a') || (chr <= 'Z' && chr >= 'A') )
return true;
return false;
永远记住,计算机使用 ASCII 代码,而不是“字符”,计算机将检查有效代码给定字符(总是正,-25
无效),在我们的例子中,chr
的ASCII码应该是smaller-or-equal到z
,依此类推(参见上面的 if-statement)。
如果您熟悉重载 return
语句,您还可以简化您的函数(使其更具可读性):
return (chr >= 'a' && chr <= 'z') || (chr >= 'A' && chr <= 'Z')
使用正则表达式的解决方案:
import java.util.regex. * ;
boolean isMatch = Pattern.matches("[a-zA-Z]", "S");