我正在做一个用户输入五个数字的程序,最后打印出的数字正常工作。我无法工作的是一个布尔函数来检查重复项。它应该在用户写入时检查重复项,例如,如果第一个数字是5而第二个数字也是5,那么在写入不同的数字之前,您应该会收到错误。意思是如果用户输入副本,则不应将其保存在数组中。这显然是一项任务,所以我只想要一两个提示。
这个程序是基于给我的伪代码编写的,因此我必须使用布尔值来检查public boolean duplicate( int number )
类的重复项。
我试过自己试着自己尝试了一些东西,但显然我犯了一个愚蠢的错误。 E.g:
if(int i != myNumbers[i])
checkDuplicates = false
else
checkDuplicates = true;
return checkDuplicates;
DuplicatesTest类:
public class DuplicatesTest {
public final static int AMOUNT = 5;
public static void main(String[] args) {
Duplicates d = new Duplicates(AMOUNT);
d.inputNumber();
d.duplicate(AMOUNT);
d.printInputNumbers();
}
}
重复课程:
public class Duplicates {
private int amount;
private int[] myNumbers;
private boolean checkDuplicates;
public Duplicates(int a) {
amount = a;
myNumbers = new int[amount];
}
public void inputNumber() {
for(int i = 0; i < amount; i++ ) {
int input = Integer.parseInt(JOptionPane.showInputDialog("Input 5 numbers"));
myNumbers[i] = input;
}
}
public boolean duplicate( int number ) {
<BOOLEAN TO CHECK FOR DUPLICATES, RETURN FALSE OR TRUE>
}
public void printInputNumbers() {
JTextArea output = new JTextArea();
output.setText("Your numbers are:" + "\n");
for(int i = 0; i < myNumbers.length; i++) {
if (i % 5 == 0) {
output.append("\n");
}
output.append(myNumbers[i] + "\t");
}
JOptionPane.showMessageDialog(null, output, "Numbers", JOptionPane.PLAIN_MESSAGE);
}
}
很抱歉,如果代码标签很乱,我之间的白色字段就会出现问题。我是新来的。
答案 0 :(得分:1)
请勿将数字存储在数组中。请改用Set<Integer>
。然后执行Set#contains()
操作。这是O(1)
操作,实际上远比迭代数组搜索重复项好得多。
好吧,如果强迫使用数组,那么你应该修改当前的方法,一旦找到副本就返回true
,而不是再次迭代数组。在您当前的方法中,由于您在boolean
块中将false
变量设置为else
,如果数组的最后一个元素不是,则您的方法将返回false
和你正在检查的一样。所以,只需将您的方法修改为:
// loop over the array
if (number == myNumbers[i])
return true;
// outside the loop, if you reach, return false
return false;
请注意,您当前的if
语句将无法编译。你在那里声明了一个int
变量,你不能这样做。
if (int i == myNumbers[i]) // this is not a valid Java code.
答案 1 :(得分:0)
int nums[] = new int[5];
int count = 0;
public boolean duplicate(int number)
{
boolean isDup = false;
for (int i = 0; i <= count; i++)
{
if (number == nums[i])
{
isDup = true;
break;
}
}
if (!isDup)
{
count++;
nums[count] = number;
}
return isDup;
}