为什么"如果"在这个布尔方法中没有做任何事情?

时间:2015-06-13 19:51:39

标签: java methods boolean

import java.util.Scanner;//import Scanner
public class review{ //name of the program
    public static void main(String[]args){ // main statement
        Scanner i=new Scanner(System.in);
        System.out.println("Enter a string");
        String b=i.nextLine();

        System.out.println("Enter a letter");
        char c=i.next().charAt(0);
        System.out.println("Answer is "+test1(b,c));
    }
     public static boolean test1(String a, char b){
         boolean result= true;
         for(int i=0;i<a.length();i++)
             if(a.charAt(i)==b)
                 result =true;
             else
                 result=false;
         return result;
     }
 }

这个程序正在寻找检查char是否在字符串中。

  

你好,E =真
  你好,a = false

3 个答案:

答案 0 :(得分:2)

在此方法test1中,您的for循环将遍历整行,但会在letter中找到string。所以像这样更新:

public static boolean test1(String a, char b){
         for(int i=0;i<a.length();i++) {
             if(a.charAt(i)==b)
                 return true;
         }
         return false;
     }

因为,如果在letter中找到了string,则您无需进一步检查,因此:

if(a.charAt(i)==b) // if condition finds true path
    return true; // so return true

请注意,return语句会导致执行离开当前的function或简洁的当前下属。

答案 1 :(得分:1)

你永远不会脱离循环。考虑"Hello"'e'

 see H: result = false
 see e: result = true
 see l: result = false...
来自循环的

break。或者,只需使用String.indexOf(char)

答案 2 :(得分:1)

每次检查后您都在更改结果,而不考虑已找到该字符的选项。 你可以看到twentylemon's answer

我只是想说一些更加正确和有效的话。 使用break并返回result,如果找到该字符,则可以返回true。 在循环结束时返回false

以这种方式,你不需要result变量和休息。

这就是你按照我的建议写的:

public static boolean test1(String a, char b)
{
     for(int i=0;i<a.length();i++)
     {
         if(a.charAt(i)==b)
         {
             return true;
         }
     }
     return false;
 }

如果你要检查它,你会看到它是多么简单和好:)