我哪里做错了?

where am ı doing wrong?

提问人:Mustafa BAL 提问时间:7/7/2023 更新时间:7/7/2023 访问量:27

问:

输入数组中的元素,不破坏它们的顺序,但单数。 编写一个程序,将其转换为新数组。例如,如果输入为 {3, 3, 87,56,1, 87, 3, 2 },则输出应为 {3, 87, 56, 1, 2 }

我想在不使用现成方法的情况下解决这个问题

'导入 java.util.Arrays; 导入 java.util.Scanner;

公共类 PassElementToAnotherArray {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    transferElementsOfArray();
}
public static int[] createArrays() {
    
    Scanner scanner = new Scanner(System.in);
    System.out.println("Please enter first array size:");
    int size = scanner.nextInt();
    int[] array = new int[size];
    for (int i = 0; i < array.length; i++) {
        array[i] = (int) (Math.random()*100);
    }
        
    return array;
}
public static void transferElementsOfArray() {
    
    int [] firstArray = createArrays();
    System.out.println("Elements of the first array: ");
    for (int i = 0; i < firstArray.length; i++) {
        System.out.print(firstArray[i]+" ");
    }
    
    System.out.println();
    
    int sizeOfTheNewArray = 0;
    int [] newArray = new int[sizeOfTheNewArray];
    
    boolean isIt = false;
    for (int i = 0; i < firstArray.length; i++) {
        
        for (int j = i+1; j < firstArray.length; j++) {
            
            if (firstArray[i]==firstArray[j]) {
                isIt = true;
                break;
            }
            else {
                isIt = false;
            }
        }
        if (!isIt) {
            sizeOfTheNewArray++;
        }           
    }       
    System.out.println(sizeOfTheNewArray);
    int counter = 0;
    for (int i = 0; i < firstArray.length; i++) {
        for (int j = i+1; j < firstArray.length; j++) {
            if (firstArray[i]==firstArray[j]) {
                isIt = true;
                break;
            }
            else {
                isIt = false;
            }
    }
    if (!isIt) {
        
        for (int j = counter; j < newArray.length; j++) {
            newArray[j] = firstArray[i];
            break;
        }
        counter++;
    }
    }
    for (int i = 0; i < newArray.length; i++) {
        System.out.println(newArray[i]);
    }
    
}

}`

当我这样做时,我什至无法在输出中看到新数组的元素

Java 数组 函数 方法

评论


答:

0赞 Elliott Frisch 7/7/2023 #1

首先,您有几个错误和可疑的设计决策

int sizeOfTheNewArray = 0;
int [] newArray = new int[sizeOfTheNewArray];

Means 始终为空。我会将问题分解为离散部分,首先计算数组中的唯一元素;newArray

public static int countUniqueElements(int[] arr) {
    int count = 0;
    loop: for (int i = 0; i < arr.length; i++) {
        if (i > 0) {
            for (int j = i - 1; j >= 0; j--) {
                if (arr[i] == arr[j]) {
                    continue loop;
                }
            }
        }
        count++;
    }
    return count;
}

接下来,您应该从用户那里读取一个值数组。让我们编写一个方法来做到这一点。读取一行逗号分隔值,在逗号上拆分并转换为 .int[]

public static int[] readArray(Scanner scanner) {
    System.out.println("Please enter your array values");
    String line = scanner.nextLine();
    String[] tokens = line.split(",");
    int[] array = new int[tokens.length];
    for (int i = 0; i < tokens.length; i++) {
        array[i] = Integer.parseInt(tokens[i].trim());
    }
    return array;
}

现在,我们可以编写一个方法来实际获取给定数组的数组的唯一元素。首先计算独特的元素。然后创建新数组。最后,重复我们在计算唯一元素时使用的策略以填充新数组。

public static int[] getUniqueElements(int[] arr) {
    int sizeOfTheNewArray = countUniqueElements(arr);
    int[] newArray = new int[sizeOfTheNewArray];
    int count = 0;
    loop: for (int i = 0; i < arr.length; i++) {
        if (i > 0) {
            for (int j = i - 1; j >= 0; j--) {
                if (arr[i] == arr[j]) {
                    continue loop;
                }
            }
        }
        newArray[count] = arr[i];
        count++;
    }
    return newArray;
}

现在我们可以更新以调用上述方法main

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int[] arr = readArray(scanner);
    System.out.printf("Before: %s%n", Arrays.toString(arr));
    int[] arr2 = getUniqueElements(arr);
    System.out.printf("After: %s%n", Arrays.toString(arr2));
}

并运行它

Please enter your array values
3, 3, 87, 56, 1, 87, 3, 2 
Before: [3, 3, 87, 56, 1, 87, 3, 2]
After: [3, 87, 56, 1, 2]