Java布尔方法,for循环未返回正确的true或false

时间:2019-02-21 22:14:00

标签: java methods boolean

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;

}

我想将true或false返回到我的main方法中,但是在for循环中将不起作用。我很困惑。

我在做什么错了?

7 个答案:

答案 0 :(得分:1)

您必须遍历数组digit

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;
}

如果s包含digit的任何项目,则您返回true

答案 1 :(得分:1)

我看到两个问题。循环中的返回值和i

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;
}

答案 2 :(得分:0)

有多个错误。首先,数组长度是通过不带()的长度计算得出的,因为它是数组的属性而不是方法。此外,您正在循环使用s长度索引的数组数字。 要检查字符串是否为数字,最好的方法是处理异常。 这是更正的代码:

public static boolean oneNumeric(String s) {
  try {  
    double d = Double.parseDouble(s);  
  } catch(NumberFormatException nfe) {  
    return false;  
  }  
  return true;
}

答案 3 :(得分:0)

问题

您的解决方案中的问题是这样的:

   for (int i = 0; i < s.length(); i++) {
       if(!(s.contains(digit[i]))) {
           return false;
       }
   }

基本上,您要遍历索引为s的字符串i,但同时使用i访问数组中的数字

解决方案

如果任务是检查字符串是否至少包含一个数字,则有几种解决方案:

  1. Java 8之前的版本:
public static boolean oneNumeric(String input) {
    for (int i = 0; i < input.length(); i++) {
        if (Character.isDigit(input.charAt(i))) {
            return true;
        }
    }
    return false;
}

  1. Java 8后:
public static boolean oneNumeric(String input) {
    return input.chars().mapToObj(c -> (char) c).anyMatch(Character::isDigit);
}

答案 4 :(得分:0)

要正确设置方法,您应该

  • 删除无用的numeric变量
  • 在访问digit.length数组时,以digit为上限
  • 删除!并返回true

它将针对每个数字检查字符串中是否存在数字,如果字符串中没有数字,则返回false

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 
}

答案 5 :(得分:-1)

您正在数字数组上使用字符串s的索引。互换其在代码中的位置:digit.contains(s[i])

另外,您可能应该使用现有的库方法,而不是构建自己的库方法。

答案 6 :(得分:-1)

这听起来像是一个作业问题,所以我不会用汤匙喂食。您的问题不是很清楚,因此我假设您正在创建一种检查字符串是否具有至少一个数字的方法。

更干净(更好的是IMO)的方法是循环遍历每个字符,并检查其ASCII值是否在数字范围内。您可以找到一个ASCII表here。请注意,数字的ASCII值为48-57(含)。下面的伪代码:

for each character {
    if NOT(char btwn 48-57)
        return false
}
return true