Java布尔方法,用于循环未返回正确的true或false public静态布尔oneNumeric(字符串s){ 字符串[]位={“0”、“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”}; 布尔数字=真; 对于(int i=0;i
我想在我的主方法中返回true或false,但它在for循环中不起作用。我很困惑Java布尔方法,用于循环未返回正确的true或false public静态布尔oneNumeric(字符串s){ 字符串[]位={“0”、“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”}; 布尔数字=真; 对于(int i=0;i,java,methods,boolean,Java,Methods,Boolean,我想在我的主方法中返回true或false,但它在for循环中不起作用。我很困惑 我做错了什么?您正在数字数组上使用字符串s的索引。交换它们在代码中的位置:数字。包含(s[i]) 另一方面,您可能应该使用现有的库方法,而不是构建自己的库方法。存在多个错误。首先,数组长度是通过length而不是()计算的,因为它是数组的属性而不是方法。此外,您正在循环索引为s长度的数组数字。 要检查字符串是否为数字,最好的方法是处理异常。 以下是更正后的代码: public static boolean oneN
我做错了什么?您正在数字数组上使用字符串s的索引。交换它们在代码中的位置:
数字。包含(s[i])
另一方面,您可能应该使用现有的库方法,而不是构建自己的库方法。存在多个错误。首先,数组长度是通过length而不是()计算的,因为它是数组的属性而不是方法。此外,您正在循环索引为s长度的数组数字。 要检查字符串是否为数字,最好的方法是处理异常。 以下是更正后的代码:
public static boolean oneNumeric(String s) {
String[] digit = {"0","1", "2", "3", "4", "5", "6" ,"7", "8", "9"};
boolean numeric = true;
for (int i=0; i< s.length(); i++) {
if(!(s.contains(digit[i]))) {
return false;
}}
return numeric;
}
这听起来像是一个家庭作业问题,所以我不会填鸭式回答。你的问题不是很清楚,所以我假设你正在创建一个方法来检查字符串是否至少有一个数字 更干净(更好,IMO)的方法是循环遍历每个字符,并检查其ASCII值是否在数字范围内。您可以找到一个ASCII表。请注意,数字的ASCII值为48-57(包括)。密码如下:
public static boolean oneNumeric(String s) {
try {
double d = Double.parseDouble(s);
} catch(NumberFormatException nfe) {
return false;
}
return true;
}
您必须遍历数组
数字:
for each character {
if NOT(char btwn 48-57)
return false
}
return true
public静态布尔oneNumeric(字符串s){
字符串[]位={“0”、“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”};
对于(int i=0;i
如果s
包含任何数字项
,则返回true
问题
您的解决方案中的问题是:
public static boolean oneNumeric(String s) {
String[] digit = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
for (int i = 0; i < digit.length; i++) {
if (s.contains(digit[i]))
return true;
}
return false;
}
后Java 8:
为了使你的方法正确,你应该
- 删除无用的
数值
变量
- 访问
数字
数组时,使用数字.length
作为上限
- 删除
代码>并返回true
它将检查每个数字是否存在于字符串中,如果字符串中没有人,则返回false
public static boolean oneNumeric(String input) {
return input.chars().mapToObj(c -> (char) c).anyMatch(Character::isDigit);
}
我看到两个问题。循环中的返回和i
public static boolean oneNumeric(String s) {
return s.matches(".*\\d.*"); // '\d' is for digit in regex
}
public静态布尔oneNumeric(字符串s){
字符串[]位={“0”、“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”};
布尔数字=假;
对于(int i=0;i
目的是检查是否只有数字?目的是检查用户输入(字符串)“至少一位”中是否至少有一位数字((s.包含(数字[i])){return true;。
由于使用i
索引到数字
,因此循环应该是i
,而不是i
Um…请不要删除整个问题?digit
是一个数组。它没有包含方法。--s
是一个字符串,所以s[i]
无效。在这种情况下,数字数组上的循环。数字数组是完全冗余的。另外,使用包含基本上对字符串s
执行线性扫描-因此,基本上,在最坏的情况下,不是单次通过字符串,而是进行10次通过。@Zgurskyi我不是说它有这么好,只是通过更正并向OP解释,以便他能够提高它的能力,还有,关于使用匹配项的建议解决方案:String.matches必须在每次执行时重新编译regexp,因此运行该行代码的频率越高,它就越浪费。如果有人寻找合适的方法,我不建议使用String.matches,如果您愿意的话经常检查字符串中的数字。@azro理解。然后提到使用contains
是不好的,所以OP可以在将来改进。
public static boolean oneNumeric(String input) {
return input.chars().mapToObj(c -> (char) c).anyMatch(Character::isDigit);
}
public static boolean oneNumeric(String s) {
String[] digit = {"0","1", "2", "3", "4", "5", "6" ,"7", "8", "9"};
for (int i=0; i< digit.length; i++) {
if(s.contains(digit[i])) {
return true;
}
}
return false;
}
public static boolean oneNumeric(String s) {
return s.matches(".*\\d.*"); // '\d' is for digit in regex
}
public static boolean oneNumeric(String s) {
String[] digit = {"0","1", "2", "3", "4", "5", "6" ,"7", "8", "9"};
boolean numeric = false;
for (int i=0; i< digit.length; i++) {
if(s.contains(digit[i])) {
numeric = true;
}
}
return numeric;
}