2011-11-26 89 views
1

我想写一个java程序,它确定如果一个数组的所有元素是质数。这里是我的代码:确定是否所有元素的数组是素数

boolean allPrimes(int[] ade){ 
     int i = 0; //counter 
     boolean Prime = true; //initial boolean value 
     while (i<ade.length && !Prime){ 
      if (p.isPrime(ade[i])) //function which determines if an int is prime. 
       Prime = true; 
      else 
       Prime = false; 
      i=i+1; 
      } 
     return Prime; 
    } 

我不认为这是正确的,因为我做了一些测试,他们失败了。我究竟做错了什么?感谢

+0

wouldnt it'while(i

+0

它是http://stackoverflow.com/questions/8114442/error-with-repetition-which-i-cant-spot – jjcastil

回答

4

您初始化布尔总理这样

boolean Prime = true; 

这意味着你永远不会同时进入循环!请将其初始化为'false'。 如果你的作业也放错了位置。

为您的代码工作 - 只需从

while (i<ade.length && !Prime)

改变,而你的第二个条件

while (i<ade.length && Prime)

+0

我前一阵子试过,但它似乎在我做的测试中失败。 – jjcastil

+0

@Darkkurama你能告诉我们失败的测试用例和isPrime方法吗? –

+0

测试是这样的: '布尔test1AllPrimes = allPrimes(ade_1)== true; \t boolean test2AllPrimes = allPrimes(ade_2)== false; \t布尔test3AllPrimes = allPrimes(ade_3)== false; \t布尔testAllPrimes = \t \t \t test1AllPrimes && \t \t \t test2AllPrimes && \t \t \t test3AllPrimes;' 其中ade_1,ade_2和ade_3是: '静态INT [] ade_1 = {2,3,5}; static int [] ade_2 = {1,4,8,12}; 静态INT [] ade_3 = {1,2,3,4};!' – jjcastil

1

Prime变量初始化为真,在while条件!Prime意味着假。 你的while循环不执行并且蒸发线返回true。

0

你永远不会进入while循环,因为Prime = true;,你早已while(i<ade.length && !Prime)检查,这意味着while (true && false)(假设ade都会有它的一些值)

2

不要在一个变量的值存储在所有。做循环并在你找到的第一个非素数值上返回false(如果你发现了一个不是,没有进一步的点处理,它们不能都是素数),然后在循环后返回true(如果你得到在那里,他们都是素数)。什么johnbk

for (int i : ade) { 
    if (!p.isPrime(i)) { 
     return false; 
    } 
} 
return true; 
+0

这似乎是“效率”方面的最佳方式。事情是,当我尝试运行程序时,它会冻结控制台,并在10秒后返回输出(主体中的布尔测试),为什么会发生这种情况? – jjcastil

+0

我不知道。我写在那里的代码应该很快,除非p.isPrime需要很长时间。你总是可以做'int i = 0;我 Thor84no

1

大厦说:

boolean allPrimes(int[] ade){ 
     int i = 0; //counter 
     boolean Prime = true; //initial boolean value 
     while (i<ade.length){ 
      if (!p.isPrime(ade[i])) { //function which determines if an int is prime. 
       Prime = false; 
       break; 
      } 
      i=i+1; 
     } 
     return Prime; 
} 

这应该很好地工作。当你发现一个不是素数的数字时,循环遍历数组,将Prime设置为false并跳出循环。

+0

你不会在while循环的条件下评估'Prime',所以你甚至不需要它,只是从循环中断开 –

1

我不是一个Java家伙,但在我看来,你对Prime的初始值应该是假的,不是真的,否则你永远不会进入你的while循环。

相关问题