这个方法做什么 - 面试

时间:2014-02-17 08:15:24

标签: java for-loop methods

以下是面试问题......你怎么能开始解决这类问题?是否存在针对此类问题的通用算法?

问题是解释这种方法的作用。我知道她为我尝试的一些输入提供了什么(而且没关系),但我真的不知道如何开始解决这类问题......

public boolean what (int num) 
{ 
    boolean ans = true; 

    for (int x = 2; (x*x <= num) && ans; x=x+1) 
    {
        if ((num % x) == 0) 
            ans = false; 
    } 

    return ans; 
}

thx!

6 个答案:

答案 0 :(得分:2)

让num = 10

public boolean what (int num) 
{ 
    boolean ans = true; 

    for (int x = 2; (x*x <= num) && ans; x=x+1) 
{              //^ multiply x with x will give (4,9).. When x = 4, than (16<= num) = false
    if ((num % x) == 0) // divide 10 by (2,3) if reminder is zero that means 10 is not prime
        ans = false; // set ans to false so that for loop can be terminated or just break;
} 

return ans; 

}

答案 1 :(得分:1)

检查num是否为素数。

要找出方法的作用,请阅读代码并尝试了解它的作用。您也可以尝试一些输入。对于好的代码,变量和方法的名称也有很大帮助(这里不是这种情况)。

但是,如果该方法实现了一个您不知道的算法,并且您不知道正在解决的问题的上下文,那么您可能永远不会知道它的作用。

答案 2 :(得分:1)

您可以遵循反向engeering过程,提供一些示例输入并获取您可以确定结果的输出。

明智地选择您的输入,以便轻松解决问题。

在目前的情况下 -

输入:1返回:true
输入:2返回:真实 输入:3返回:真实 输入:4返回:假
输入:5返回:真实 ...
输入:9返回:false //aha...it似乎是素数
...
输入:111返回:错误

所以在这种情况下它的素数逻辑。

答案 3 :(得分:1)

你可以找到它运行带有几个随机输入的方法, 并尝试找出您提供的INPUT和出现的OUTPUT之间的关系。

在得出结论之前,先检查一下“已知输出”然后再声明你的答案。

答案 4 :(得分:1)

在上述程序中,最初假设数字不是素数。如果任何大于2且小于或等于数字平方根的数字除以给定数字,则该数字不是素数。

如果数字不是素数,则该方法返回true,如果数字是素数,则返回false。

答案 5 :(得分:0)

方法的目的:找出素数。

如果输入数字是素数,则此方法给出booleaan ans ='true'的输出。 否则它返回false值。

根据最简单的逻辑来确定数字是否为素数。

例如,如果数字是11, 第1步 - 我们将它乘以num(num * num)小于11. {无需测试超出值大于num * num,因为所有可能的情况都经过测试}。

步骤2 - 检查除以11/2的余数是否为零,如果余数不为0则11则不是素数。如果它除以我们返回步骤1

所以循环将是......

步骤1 num = 11,x = 2

步骤2 11%2!= 0所以转到步骤1,num不可分割

步骤1 num = 11,x = 3

Step2 11%3!= 0

步骤1 num = 11,x = 4但x * x = 16且16> 11所以没有更多的循环,11是素数,因为它不能被任何数字整除,直到x = 3。

另一个例子可以是38 .. 步骤1数38,x = 2

步骤2 38%2 == 0,因此余数= 0且ans = false因此不再循环,'38'不是素数。

一种更先进的方法来寻找一个数字,如果它的素数与否可能只是针对质数来测试它的可分性。这实际上是更有效的,如果我们有更大的数字作为输入。

public boolean what (int num) // number to be tested is passed
{ 
boolean ans = true;   // default value
        for (int x = 2; (x*x <= num) && ans; x=x+1) //looping till num is found divisibl 
        {
            if ((num % x) == 0) 
            ans = false;   // ans is false in case num is not prime
        } 
        return ans; // num is prime
}

希望解释有所帮助..如果有任何疑问或帮助,请给我留言。