我创建了一个代码,要求用户输入10个必须为负数的数字,当它们不是时,用户被迫再次输入,然后加上10个负数的总和,如下所示。我现在要做的是找到不同的整数(有多少并显示数量以及列出它们是什么)。我的理解是,不同的整数只是尚未添加的数字。例如,如果输入-1,-2,-3,-3,-9,-1,-7,-7,-1,-3
,那么不同整数的数量将为5,它们将为-1,-2,-3,-7,-9
。
import java.util.Scanner;
public class distinctint {
double counter;
Scanner scan = new Scanner(System.in);
public double go() {
int a;
int n;
counter = 7;
while (counter != 0) {
System.out.println("Enter number: ");
if(newInteger < 0) {
int newInteger = scan.nextInt()
newint += newInteger;
dial = dial - 1;
}
}
System.out.println("sum=" + newint);
}
}
我遇到的这个问题是试图找到一种方法来实现我的目标。我很确定我需要一些包含所有不同整数的数组,但我不确定从哪里开始。这样的事情会有意义吗?
numbers[] distinctnumbers;
答案 0 :(得分:1)
如果您要添加的元素对集合是新的,add
接口的Set
方法会返回true
这一事实,您可以利用false
如果它已经在集合中。
我会做这样的事情。我已经省略了所有的验证和循环,因为你显然知道如何做到这一点。
// Before your loop
Set<Integer> numbersIveAdded = new HashSet<>();
int total = 0;
// Inside your loop
int numberEntered = scan.nextInt();
boolean thisIntegerIsNew = numbersIveAdded.add(numberEntered);
if (thisIntegerIsNew) {
total += numberEntered;
}
答案 1 :(得分:0)
如前所述,Set
仍然是执行此操作的最佳方式。但是,如果您只需要使用Arrays
,则可以执行以下操作。
//outside while loop
int[] array = new int[10];
//inside the while loop
int newInteger = scan.nextInt();
if(newInteger >= 0)
{
System.out.println("Must be negative integer, please try again");
}
else if (checkIfAlreadyPresent(array, newInteger)) {
System.out.println("Integer already present, please enter a distinct one.");
} else {
n+=newInteger;
counter = counter - 1;
a=a+newInteger;
}
//O(n) worst case vs O(1) for Set
public boolean checkIfIntegerAlreadyPresent(int[] array, int inputInteger) {
for(int a:array) {
if(a==inputInteger)
return true;
}
return false;
}