Java布尔方法,用于循环未返回正确的true或false public静态布尔oneNumeric(字符串s){ 字符串[]位={“0”、“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”}; 布尔数字=真; 对于(int i=0;i

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

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


我做错了什么?

您正在数字数组上使用字符串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;
    }