提问人:Mustafa BAL 提问时间:7/7/2023 更新时间:7/7/2023 访问量:27
我哪里做错了?
where am ı doing wrong?
问:
输入数组中的元素,不破坏它们的顺序,但单数。 编写一个程序,将其转换为新数组。例如,如果输入为 {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]);
}
}
}`
当我这样做时,我什至无法在输出中看到新数组的元素
答:
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]
评论