变量" num"是一个2D数组。如果有任何重复,我试图检查该数组。 " NUM"是用户输入。
我已经广泛浏览了Java文档并询问了我的讲座,但我找不到合适的答案。我理解这个概念,我的意思是做什么,但只是不能正确编码。
这是我的代码:
for(int i = 0; i < 3; i++){ //3 rows with 5 numbers each
for(int j = 0; j < 5; j++){
num[i][j] = Integer.parseInt(JOptionPane.showInputDialog(null, "Enter value for line: " + i + " and position: "+ j ));
if((num[i][j] == num[i][0]) || (num[i][j] == num[i][1]) ||(num[i][j] == num[i][2]) || (num[i][j] == num[i][3]) || (num[i][j] == num[i][4])){
if(num[i][j] != 0){
num[i][j] = Integer.parseInt(JOptionPane.showInputDialog(null, "ERROR. Enter value for line: " + i + " and position: "+ j ));
}
}
}
}
我也尝试过使用HashSet,但我认为这只适用于1D数组。
我想使用这样的东西,因为我觉得我最了解:
secret = new Random().ints(1, 40).distinct().limit(5).toArray();
但显然不是随机的。
我试过这个:
Set<Integer> check = new HashSet<>();
Random gen = new Random();
for(int i = 0; i < 3; i++){ // 3 rows, 5 numbers
for(int j = 0; j < 5; j++){
num[i][j] = Integer.parseInt(JOptionPane.showInputDialog(null, "Enter value for row " + i + " and position " + j));
check.add(gen.nextInt(num[i][j]));
}
}
编码的最后一部分(直接在此之上)编译并运行,但不检查是否有重复。
答案 0 :(得分:0)
这是实现此目的的一种方法,您可以使用哈希集来跟踪已插入到2D阵列中的内容:
CurrencyPipe
答案 1 :(得分:0)
还有其他方法可以检查重复项(例如,您可以将之前输入的数据循环回2D阵列以检查重复值)但是,这是我如何使用Set进行检查为了重复,您是否尝试使用所有唯一值填充2d数组,其中每个值来自用户?? (同样 - 在原始帖子中明确知道这将非常有帮助,感谢Michael Markidis指定的那个)
在这里有一点UX知识,分离ERROR对最终用户有帮助,因为ERROR +同时重新输入会让人感到困惑。
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import javax.swing.JOptionPane;
public class App {
public static void main(String[] args) {
int[][] num = new int[3][5];
System.out.println("Before:");
for (int i = 0; i < 3; ++i)
System.out.println(Arrays.toString(num[i]));
Set<Integer> data = new HashSet<Integer>();
for (int i = 0; i < 3; i++) { // 3 rows with 5 numbers each
for (int j = 0; j < 5; j++) {
boolean isGoodInput = false;
while (!isGoodInput) {
String input = JOptionPane.showInputDialog(null, "Enter value for line: " + i + " and position: " + j);
Integer n = Integer.parseInt(input);
if (data.contains(n)) {
JOptionPane.showMessageDialog(null, "ERROR: Try again");
} else {
num[i][j] = n;
isGoodInput = data.add(n);
}
}
}
}
System.out.println("After:");
for (int i = 0; i < 3; ++i)
System.out.println(Arrays.toString(num[i]));
}
}
注意:2D阵列仅限于您在原始帖子中的规格为3x5,因此您必须在多个位置更改这些值以制作不同大小的阵列 - 可能使这些更加动态可以加速进一步开发这个应用在未来。