我有一个问题,标题实际上完美地概括了它。因此,我将继续向您展示代码片段。 因此,methode generate正在生成一个数组,其中填充了1到1000之间的数字,包括两者。数组的长度是用户输入的。 下一个方法isPrime将得出结论,如果它是质数,那么我可以在其他方法中将这些数字与真实条件一起使用。生成方法有效,但是在isPrime中,我总是会出错。如果您能想到更好的方法,请告诉我。
static int[] generate(int n) {
int[] arr = new int[n+1];
for(int x = 0; x <= n; x ++) {
int number = (int) (Math.random()* 999)+1;
arr[x] = number;
}
return arr;
}
static int isPrime(int p, final int q[]) {
boolean itIs = true;
//final int[] arr;
for(int r = 0; r <= p; r++) { // here it somehow states r is deadCode
for(int j = 2; j < q[r]; j++) {
if(q[r]%j == 0) {
itIs = false;
}
}
return q[r];
}
}
答案 0 :(得分:0)
首先,创建一种方法来检查值是否为质数:
public boolean isPrime(int value) {
for (int i = 0; i < value / 2; i++) { // value / 2 is enough, doesn't need to check all values
if (value % i == 0) {
return false;
}
}
return true;
}
然后您检查数组的每个值,并将素值放入新数组:
public int[] filterArray(int[] array) {
List<Integer> intList = new ArrayList<>();
for (int i = 0; i < array.length; i++) {
if (isPrime(array[i])) {
intList.add(array[i]);
}
}
Integer[] integerArray = intList.toArray(new Integer[intList.size()]);
int[] intArray = ArrayUtils.toPrimitive(integerArray);
return intArray;
}
然后您将获得过滤后的素数数组。
答案 1 :(得分:0)
它仍然无法正常工作,但我将其更改为此。
static int[] generate(int n) {
int[] arr = new int[n+1];
for(int x = 0; x <= n; x ++) {
int number = (int) (Math.random()* 999)+1;
arr[x] = number;
}
return arr;
}
static boolean isPrime(int p) {
boolean itIs = true;
for(int j = 2; j < p; j++) {
if(p%j == 0) {
itIs = false;
}
}
System.out.print(p + "bla" + itIs);
return itIs;
}
//numberCount, isPrime, generate()[]
static void filterPrimeNumbers(int zahlmenge,boolean t, final int[] u) {
int []arr2 = new int[0];
int l = 0;
for(int n = 0; n <= zahlmenge; n++) {
if(t) {
arr2[l] = u[n];
l++;
}
System.out.println(arr2[0]);
}
}
public static void main(String[] args) {
System.out.print("Give me a number: ");
Scanner sc = new Scanner(System.in);
int numberCount = sc.nextInt();
filterPrimeNumbers(numberCount, isPrime(generate(numberCount)[0]), generate(numberCount));
}
}