基本上,我的代码从用户那里获取输入,并使用一种方法来检查输入是否唯一。 如果不是唯一的,请要求用户输入其他名称。
我的想法:
import java.util.Scanner;
public class testing {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] input = new int[10];
for (int i = 0; i < 10; i++) {
while (true) {
int n = sc.nextInt();
for (int j = 0; j < input.length; j++) {
input[j] = n;
checkunique(input);
System.out.println("Choose a different one");
}
break;
}
}
public static boolean checkunique(int[] Array) {
for (int i = 0; i < Array.length - 1; i++) {
for (int j = 1 + 1; j < Array.length; j++) {
if (Array[i] == Array[j]) {
return true;
}
}
}
return false;
}
}
}
对不起,从现在开始我无法弄清其余的情况。
答案 0 :(得分:1)
在将输入的值添加到数组之前,可以检查输入的值是否与数组中的另一个值相同。为此,您可以使您的检查方法采用两个这样的参数:
public static boolean checkunique(int testValue, int[] array) {
for (int i = 0; i < array.length; i++) {
if (testValue == array[i]) {
return false;
}
}
return true;
}
因此,在将值放入数组之前,请先调用checkunique
方法,如果该方法返回true
,则将该值添加到数组,否则,请要求用户输入另一个值。您可以为main
方法执行以下操作:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] input = new int[10];
for (int i = 0; i < input.length; i++) {
int n = sc.nextInt();
boolean loop = true;
do {
if (checkunique(n, input)) {
// If true
input[i] = n;
loop = false;
} else {
// If false
System.out.println("Choose a different one.");
n = sc.nextInt();
}
} while (loop);
}
}
注意: 由于初始数组由零组成,因此输入零将被视为重复项。如果要解决此问题,只需将数组值初始化为选择的默认值即可。
答案 1 :(得分:1)
这是执行此操作的一种方法。 您可以维护一个Set,在其中存储用户输入。java中的Set只允许唯一数据。因此,您要做的就是检查用户是否输入了您的Set中已经存在的数字。
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class SOTest {
private static Set<Integer> uniqueInput = new HashSet<>();
public static void main(String[] args) {
try (Scanner sc = new Scanner(System.in)) {
while (true) {
System.out.println("Choose a number:-");
int n = sc.nextInt();
if (!uniqueInput.contains(n)) {
uniqueInput.add(n);
if(uniqueInput.size()==10) break;
} else {
System.out.println("Duplicate input");
continue;
}
}
}
for(Object i:uniqueInput.toArray()) {
System.out.print(i+" ");
}
}
}
答案 2 :(得分:0)
您发布的代码应该没问题。如果用户数量过多,则可能要使用HashMap。
答案 3 :(得分:0)
您可以使用Set添加元素并检查其是否唯一。每次将元素添加到Set using add函数中时,如果再次添加相同的元素,它将返回true。这样您就可以通知用户选择其他选项。
答案 4 :(得分:0)
import java.util.*;
class InputChecker {
public static boolean checkInput(String[] a, String b) {
boolean isIn = false;
for(int x = 0; x < a.length - 1; x++) {
if(x == 1) {
if(a[1].equals(a[0]))
isIn = true;
}
if(a[a.length - 1].equals(a[x]))
isIn = true;
}
return isIn;
}
}
public class MainChecker {
public static void main(String[] args){
Scanner receive = new Scanner(System.in);
InputChecker check = new InputChecker();
ArrayList<String> checkMe = new ArrayList<String>();
ArrayList<String> validEntry = new ArrayList<String>();
while(true) {
System.out.println("Please enter some input, or end to quit: ");
String userInput = receive.nextLine();
if(! userInput.equals("end")) {
checkMe.add(userInput);
String[] k = new String[checkMe.size()];
k = checkMe.toArray(k);
boolean bool = check.checkInput(k, userInput);
if(bool) {
System.out.println("Please enter another input: ");
}
else {
System.out.println("Input stored!");
validEntry.add(userInput);
}
}
}
}
}
这是您的输出:
Please enter some input, or end to quit:
Sim
Input stored!
Please enter some input, or end to quit:
Yo
Input stored!
Please enter some input, or end to quit:
Sim
Please enter another input:
Please enter some input, or end to quit:
Yo
Please enter another input:
Please enter some input, or end to quit:
说明: 在此示例中,我们仅使用可以为您进行检查的方法创建了另一个类。我们将用户输入存储在ArrayList中,然后可以在主程序中将该ArrayList转换为String数组。当我们在主类中调用该方法时,可以将该数组传递给在另一个类中创建的方法,并且可以检查当前输入是否已经在传递给该方法的数组中。我们将在我们创建的方法中使用一个布尔值作为“标志”,如果该“标志”的值为“ true”,则我们知道用户输入已经在数组中。然后,我们在主程序中将该标志用作条件测试,如果它为“ true”,则知道用户输入已经存储。如果用户输入已经在该阵列中,我们将要求用户提供更多输入,并且我们不会将其存储在主存储阵列中。但是,如果用户输入是“唯一的”,我们将确认输入已存储,并将其放入我们的主数组中。这就是程序的要旨,如您所见,将其分解成类和方法在这里很有用。