2013-02-22 34 views
-1

我试图写一个简单的程序,从40如何从大小为40的数组中获取素数的数量?

我写了下面的代码的数组的大小给出了最大值,最小值,偶数的个数,奇数和素数的数数:

package TESTING; 
import java.util.*; 

public class testClass{ 
    public static void main (String args[]){ 

    int numbers[]= {1,5,-9,12,-3,89,18,23,4,-6,14,-5,87,17,47,-73,39,49,56,71, 
        3,0,-2,23,-8,45,63,71,5,29,-4,15,78,37,99,-66,44,94,65,73}; 
    //Find minimum (lowest) value in array using loop 
    System.out.println("Minimum Value = " + getMinValue(numbers)); 
    //Find maximum (largest) value in array using loop 
    System.out.println("Maximum Value = " + getMaxValue(numbers)); 
    System.out.println("Even Numbers = " + even(numbers)); 
    System.out.println("Odd Numbers = " + odd(numbers)); 
    for(int number = 1; number<=numbers.length; number++){ 
    //print prime numbers only 
    if(isPrime(numbers)){ 

     System.out.println("+ numbers"); 
    } 
    } 


//Find maximum (largest) value in array using loop 
public static int getMaxValue(int[] numbers){ 
int maxValue = numbers[0]; 
for(int i=1;i<numbers.length;i++){ 
    if(numbers[i] > maxValue){ 
     maxValue = numbers[i]; 
    } 
} 
return maxValue; 
} 

//Find minimum (lowest) value in array using loop 
public static int getMinValue(int[] numbers){ 
int minValue = numbers[0]; 
for(int i=1;i<numbers.length;i++){ 
    if(numbers[i] < minValue){ 
     minValue = numbers[i]; 
    } 
} 
return minValue; 
} 
//Find even numbers in array 
public static int even(int[] numbers) 
{ 
int countLength = 0; 

for (int i = 0; i < numbers.length; i++) { 
    if (numbers[i] % 2 == 0) { 
     countLength++; 
    } 
} 

return countLength; 
} 

public static int odd(int[] numbers) 
{ 
int countOdd =0; 
for (int i=0; i<numbers.length; i++) { 
    if (numbers[i] %2 != 0){ 
     countOdd++; 
    } 
} 
return countOdd; 

} 

public static boolean isPrime(int numbers[]){ 
    for(int i=2; i<numbers.length; i++){ 
    if(numbers.length%i == 0){ 
     return false; //number is divisible so its not prime 
     } 
    } 
    return true; //number is prime now 
}  


} 

我找不到问题在哪里?它不显示输出中的素数。 我得到以下输出:

输出

Minimum Value = -73 
Maximum Value = 99 
Even Numbers = 14 
Odd Numbers = 26 
+3

是什么问题? – 2013-02-22 07:39:21

+0

你得到的输出是什么? – 2013-02-22 07:39:47

+0

而输出是?你遇到了什么错误? – 2013-02-22 07:40:03

回答

0

我想这就是问题所在。正确地观察代码变化: -

for (int number = 0; number < numbers.length; number++) { 
      // print prime numbers only 
      if (isPrime(numbers[number])) { 
       System.out.println("Prime= "+numbers[number]); 
      } 
     } 

isPrime(number)应使用不numbers[],然后你isPrime()方法应该是

public static boolean isPrime(int number) { 
     for (int i = 2; i < number; i++) { 
      if (number % i == 0) { 
       return false; // number is divisible so its not prime 
      } 
     } 
     return true; // number is prime now 
    } 

让这些代码的变化。它会工作。

+0

修正了一些逻辑在那里亚:D – 2013-02-22 07:51:32

+0

谢谢@传奇! – SudoRahul 2013-02-22 07:52:40

+0

它不工作。在方法中显示错误。 – xubi 2013-02-22 07:57:17

0

您正在尝试打印素数..是吗?然后删除下面我编辑的双引号。

试试这个:尝试打印素数时内部for循环。

if(isPrime(numbers[i])){ 

    System.out.println(numbers[i]); 
} 

而不是

if(isPrime(numbers)){ 

    System.out.println("+ numbers"); 
} 

和编辑您isPrime功能了。

public static boolean isPrime(int numbers){ 
    for(int i=2; i<numbers; i++){ 
     if(numbers%i == 0){ 
      return false; //number is divisible so its not prime 
     } 
    } 
    return true; //number is prime now 
}  
0

你可以很容易地从数据创建一个Java ListArrays.asList()

分类列表。您的第一个和最后一个元素现在是最小值和最大值。

使用CollectionUtils.countMatches(),写一个谓词来测试是否NUMER isPrime,ISEVEN,ISODD ...

祝你好运!

0

这里是isPrime的更好的方法:

public static int[] getPrime(int[] someNumbers) { 
    int[] temp = new int[someNumbers.length]; 
    int cnt = 0; 
    for (int num : someNumbers) { 
    int max = num/2; 
    for (int i = 2; i <= max; i++) { 
     if (num % i == 0) { 
     temp[cnt++] = num; 
     } 
    } 
    } 
    int[] result = new int[cnt]; 
    System.arrayCopy(temp, 0, result, 0, cnt); 
    return result; 
} 

注:打印它,你必须遍历方法的结果,并打印出每个号码

public static void printArray(int[] anArray) { 
    boolean firstRun = true; 
    for (int num : anArray) { 
    if (! firstRun) { 
     System.out.print(", "); 
    } else { 
     firstRun = false; 
    }  
    System.out.print("" + num); 
    } 
    System.out.println(); 
}