我目前正在尝试编写一个程序,要求用户输入一个三位数字,然后根据计算机生成的随机3位数字进行检查。用户输入的数字必须有三个唯一的数字,因为计算机编号也有三个唯一的数字。 到目前为止,我已经设法将用户的三位数字放入一个阵列中,每个阵列位置都有一位数,但我无法正确验证它。它能够识别两个相同的数字,因此它需要向用户询问具有3个不同数字的新数字(即循环回到开始),直到用户遵守为止。 System.out.println只是为了检查它是否正在挑选两位数。到目前为止,这是我的代码。这是一种方法,而不是整个程序。
public static int[] getUserNumberDebugMode(String compNum){
final int RANDOM_NUMBER_SIZE = 3;
int[]userNumber = new int [RANDOM_NUMBER_SIZE];
String userGuessAsString;
userGuessAsString = JOptionPane.showInputDialog(compNum + "\n Please enter a number.");
int number = Integer.parseInt(userGuessAsString);
// put three digit number individually into array
for(int loop = (userNumber.length - 1); loop>=0; loop--){
userNumber[loop]= number%10;
number = number/10;
} // end userNumber array populating
for (int outerloop = 0; outerloop < userNumber.length; outerloop++){
for (int innerloop = outerloop - 1; innerloop > -1; innerloop --){
while (userNumber[outerloop] == userNumber [innerloop]){
System.out.println("user compare: " + outerloop + " with: " + innerloop);
} // end while loop
}// end inner loop
} // end outer loop
return userNumber;
} // end getUserNumberDebugMode
答案 0 :(得分:2)
通过计算一个唯一的数字来解决问题,检查是否有任何数字匹配,然后将整个事物放入do / while循环中,同时进行唯一数字检查&gt; 0.我确定不是最优雅的解决方案,但它确实有效。
do{
uniqueCheck = 0;
userGuessAsString = JOptionPane.showInputDialog(compNum + "\n Please enter a number.");
int number = Integer.parseInt(userGuessAsString);
// put three digit number individually into array
for(int loop = (userNumber.length - 1); loop>=0; loop--){
userNumber[loop]= number%10;
number = number/10;
} // end userNumber array populating
for (int loop = 0; loop < userNumber.length; loop++){
for(int innerLoop = 0; innerLoop < userNumber.length; innerLoop++) {
if(loop != innerLoop) {
if (userNumber[loop] == userNumber[innerLoop] ){
JOptionPane.showMessageDialog(null, "Please enter three unique digits!", "ERROR", JOptionPane.ERROR_MESSAGE);
uniqueCheck ++;
} // end inner IF loop
} // end outer IF loop
} // end inner for loop
} // end outer for loop
} while (uniqueCheck > 0);
答案 1 :(得分:1)
我没有通过该程序,因为它看起来有点复杂,你想要实现的目标。要确保用户输入包含3个唯一数字的数字,请尝试以下算法:
更简单,而不是循环。
答案 2 :(得分:0)
但是,关于您的outerloop和innerloop值,第一次检查userNumber时,outerloop
将为0
,innerloop
将为-1
。可能不是你想要的。为了使循环逻辑正确,只需逐步执行每行代码,确定每个步骤的每个变量(或在调试器中执行此操作)。这应该可以帮助你纠正你的逻辑。
答案 3 :(得分:0)
作为家庭作业的帮助,我会建议你以错误的方式看待这个问题。请记住,当O(n)解决方案可用时,方法中的错误可能导致三重嵌套循环和O(n ^ 2)或更糟。
听起来你不是在寻找一个3位数字,你正在寻找3位数 - 这些是非常不同的东西 - 如果顺序无关紧要,那么这个事实对你有用。如果您只是在寻找X数字并在第一个之后验证每个数字,并且它没有被看到超过N次(这里N = 0),那么您选择了错误的东西来制作数组。 / p>
您应该能够在没有嵌套循环的情况下执行此操作。如果你小心我相信你应该只用一个循环(假设数组初始化为理想的东西或者你可以检查是否初始化了单元格)。如果你只是更聪明一点,你可以为下一个问题正确地解决这个问题,包括10个唯一的数字,或者数字不超过3次,或者扩展到包括字母。
换句话说,你是否正在对此进行冒泡排序?要确定之前是否已经看到位置Y的值,您是否在位置0到Y-1之间进行迭代?你是否通过0到Y来重复在Y + 1的位置?