Java 测试数组中的数字是否重复,然后将其删除

Java 测试数组中的数字是否重复,然后将其删除,java,arrays,Java,Arrays,所以我的问题是我必须列出一个数组中一个数的素数因子,以及在给定数组中相同位置上另一个素数因子的幂(如果你想要素数因子为60,我需要返回一个包含如下内容的数组:素数:{2,3,5}幂{2,1,1}=>(2*2)*(3*1)*(5*1)=60。 我现在有以下代码来确定primes数组中的重复项,但是我现在如何才能不将它们打印到控制台,而是将它们保存在另一个变量中,然后将它们用于powers数组 long current = primes[0]; boolean found = false; for(

所以我的问题是我必须列出一个数组中一个数的素数因子,以及在给定数组中相同位置上另一个素数因子的幂(如果你想要素数因子为60,我需要返回一个包含如下内容的数组:素数:{2,3,5}幂{2,1,1}=>(2*2)*(3*1)*(5*1)=60。 我现在有以下代码来确定primes数组中的重复项,但是我现在如何才能不将它们打印到控制台,而是将它们保存在另一个变量中,然后将它们用于powers数组

long current = primes[0];
boolean found = false;
for( int i = 0; i < primes.length; i++) {
   if( current == primes[i] && !found) {
      found = true;
   }
   else if( current != primes[i] ) {
      System.out.print(" " + current);
      current = primes[i];
      found = false;
   } 
long current=primes[0];
布尔值=false;
for(int i=0;i
然后,完整代码将是:

public class Algebra {

public static long [][] primfaktorzerlegung(long n){

    int position = 0;
    long[] primes = new long [0];
    long [] powers = new long [0];



    while(n%2 == 0) {
        primes[position] = 2;
        position++;
        n = n / 2;
    }
    for (int i = 3; i <= Math.sqrt(n); i+= 2)
    {
        while (n%i == 0)
        {

            n /= i;
        }
    }
    long current = primes[0];
    boolean found = false;
    for (int i = 0; i < primes.length; i++) {
        if (current == primes[i] && !found) {
            found = true;
        } else if (current != primes[i]) {
            current = primes[i];
            found = false;
        }


    }
    long[][] z = {primes,powers};
    return z;
    }
}
公共类代数{
公共静态长[][]primfaktorzerlegung(长n){
int位置=0;
long[]素数=新的long[0];
长[]次方=新长[0];
而(n%2==0){
素数[位置]=2;
位置++;
n=n/2;
}
对于(int i=3;i代码:

注:

对于素数和幂,使用类代替
long[][
会更好,如下所示:

class PrimeUsage {
   long prime;
   long power;
}

PrimeUsage[] or List<PrimeUsage> or Set<PrimeUsage>
类使用{
长素数;
长功率;
}
PrimeUsage[]或列表或集合
您需要每个素数的频率,java中有一种标准的方法可以做到这一点。此外,由于您不知道会有多少素数,因此最好使用列表

但您甚至不需要使用这两种方法,只需使用
映射
,一次累积素数和幂:

Map<Long, Long> primePowers = new LinkedHashMap<>();
for (int i = 2; i <= Math.sqrt(n); i+= 2) {
    while (n%i == 0) {
        primePowers.put(i, primePowers.getOrDefault(i, 0L) + 1);
        n /= i;
    }
}

// convert the Map to the return value
long[] primes, powers = new long[primePowers.size()];
int i = 0;
for (Map.Entry<Long, Long> entry : primePowers.entrySet()) {
    primes[i] = entry.getKey();
    powers[i] = entry.getValue();
}

return new long[][]{primes,powers};
Map primePowers=newlinkedhashmap();

对于(int i=2;i current=primes[0];而“i”从0开始,因此条件current==primes[i]始终为真,请发布其余代码
class PrimeUsage {
   long prime;
   long power;
}

PrimeUsage[] or List<PrimeUsage> or Set<PrimeUsage>
Map<Long, Long> primePowers = new LinkedHashMap<>();
for (int i = 2; i <= Math.sqrt(n); i+= 2) {
    while (n%i == 0) {
        primePowers.put(i, primePowers.getOrDefault(i, 0L) + 1);
        n /= i;
    }
}

// convert the Map to the return value
long[] primes, powers = new long[primePowers.size()];
int i = 0;
for (Map.Entry<Long, Long> entry : primePowers.entrySet()) {
    primes[i] = entry.getKey();
    powers[i] = entry.getValue();
}

return new long[][]{primes,powers};