我需要编写一个程序,对于给定的int数组打印所有元素,但每个值只有一次,不重复。那是我的导师说的。我同意这里有几个例子,但我有特殊条件,如:
不要创建任何辅助数组,集合或字符串!
不要使用标准java.lang以外的包中的任何类。
我一直在研究Java,所以这就是我所做的:
public class Third {
public static void main(String[] args) {
int[] p = {5, 2, 2, 5, -1, 5, 12, 2, 5, 44, 12, 9};
remove(p);
}
static public void remove(int[] a) {
int min = Integer.MIN_VALUE;
for (int i = 0; i < a.length; i++) {
for (int j = i + 1; j < a.length; j++) {
if (a[i] == a[j]) {
a[i] = min;
}
}
}
for (int j = 0; j < a.length; j++) {
if (a[j] != min) {
System.out.println( a[j] );
}
}
}
}
我意识到这不高效,因为它无法打印int的最小值。那么有没有其他方法正确地做到这一点?
答案 0 :(得分:0)
既然你说你只想打印一次数组的元素,但你不能使用任何结构或其他数组来实现这一点,我相信你最好的策略是简单地扫描数组并查找相同的元素来自索引的值,只有在您找不到任何内容时才打印。
例如:对于数组{5, 2, 2, 5, -1, 5, 12, 2, 5, 44, 12, 9}
,当您查看第一个5
时,您会在右侧看到另外三个五,这样您就不会打印任何内容,但是当你看到第四个5
时,那将是非的,所以你将打印它。例如,当您看到-1
时,您无法在右侧看到任何其他-1
,并且您将打印它。
public static void main(String[] args) {
int[] p = {5, 2, 2, 5, -1, 5, 12, 2, 5, 44, 12, 9};
remove(p);
}
static public void remove(int[] a) {
for (int i = 0; i < a.length; i++) {
boolean found = false;
for (int j = i + 1; j < a.length; j++) {
if (a[i] == a[j]) {
found = true;
break;
}
}
if (!found)
System.out.println(a[i]);
}
}
数组的输出将为:
-1
2
5
44
12
9
每个元素只打印一次
答案 1 :(得分:0)
根据您的问题,我在提供解决方案。在第一个我按升序排序array
然后我打印当前索引a[i]
如果它不等于下一个索引a[i+1]
。
程序:
int a[] = { 5, 2, 2, 5, -1, 5, 12, 2, 5, 44, 12, 9};
int temp = 0;
for (int i = 0; i < a.length; i++) {
for (int j = i; j < a.length; j++)
if (a[i] > a[j]) {
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
for (int i = 0; i < a.length - 1; i++) {
if (a[i] != a[i + 1]) {
System.out.println(a[i]);
}
if (i == a.length - 2)
System.out.println(a[i + 1]);
}
输出:
-1
2
5
9
12
44
希望它会对你有所帮助。