我的import java.util.Scanner;
public class Assignment4Part2 {
public static void main(String[] args) {
int[] numbers = new int[5];
System.out.println("Enter an integer (50-100): ");
Scanner input = new Scanner(System.in);
int uniqueCount = 0;
for (int i = 0; i < numbers.length;) {
{
numbers[i] = input.nextInt();
if (isValid(numbers[i]) == true) {
i++;
if (isUnique(numbers, numbers[i]) == true) {
uniqueCount++;
System.out.printf("Unique so far: %d ", uniqueCount);
}
if (isUnique(numbers, numbers[i]) == false) {
System.out.println("That's not unique.\n");
}
}
}
}
for (int i = 0; i < numbers.length; i++)
{
System.out.print(numbers[i] + " ");
}
}
public static boolean isValid(int array) {
if (array <= 100 & array >= 50) {
return true;
} else {
System.out.println(" ***Invalid Number\n");
return false;
}
}
public static boolean isUnique(int[] array, int numbers) {
for (int i = 0; i < array.length; i++) {
if (array[i] == numbers) {
return false;
} else {
return true;
}
}
return false;
}
}
方法遇到问题。要么是我犯了逻辑错误,要么是语法错误,或两者兼而有之。我必须确保我得到的每个用户输入都是唯一的。我所做的其他一切都是正确的,但这种方法。我正在使用调试器,我注意到“数字”不会随着用户输入的变化而改变,但我是新的,有点丢失。 Assigment:输入5个数字并测试有效性和唯一性。如果无效则不计入5个数字。如果不是唯一计数5个数字但计算唯一数量并打印“不唯一”,如果不是唯一的。
set(EXECUTABLE_NAME ball_popping)
set(LIBRARY_NAME ball_popping_lib)
add_library(${LIBRARY_NAME} STATIC ball_popping.cpp ${INCLUDE_FILES})
add_executable(${EXECUTABLE_NAME} game.cpp)
target_link_libraries(${LIBRARY_NAME} ${Precompiled_LIBRARIES})
target_link_libraries(${EXECUTABLE_NAME} ${LIBRARY_NAME})
答案 0 :(得分:0)
我注意到的一些事情:
for (int i = 0; i < numbers.length;) {
{
numbers[i] = input.nextInt();
if (isValid(numbers[i]) == true) {
//i++; // in case you increment here, you do it before is unqique is true... so next isUnique is of an emtpy (null) numbers[i]
if (isUnique(numbers, numbers[i]) == true) {
uniqueCount++;
System.out.printf("Unique so far: %d ", uniqueCount);
//continue here
i++;
}// why not an else?
//if (isUnique(numbers, numbers[i]) == false) {
else {
System.out.println("That's not unique.\n");
}
}
}
}
并且独一无二......
public static boolean isUnique(int[] array, int numbers) {
// here the given number is already in the array, so never unique....
// this will always return false, because the input is already in the array
for (int i = 0; i < array.length; i++) {
if (array[i] == numbers) {
return false;
} else {
return true;
}
}
return false;
}
所以使用:
for (int i = 0; i < numbers.length;) {
{
// use a temp value before putting it in the array
int input = input.nextInt();
if (isValid(input) == true) {
//i++; // in case you increment here, you do it before is unqique is true... so next isUnique is of an emtpy (null) numbers[i]
if (isUnique(numbers, input) == true) {
uniqueCount++;
numbers[i] = input
System.out.printf("Unique so far: %d ", uniqueCount);
//continue here
i++;
}// why not an else?
//if (isUnique(numbers, numbers[i]) == false) {
else {
System.out.println("That's not unique.\n");
}
}
}
}
并且是独特的功能......
if (array[i] == numbers) {
虽然并非所有数字都被填写...这比较:
if(null == numbers){
所以在前面添加会更短:
if(array[i]==null){
break;
}
因为其余的仍然是空的
答案 1 :(得分:0)
错误位于方法for
的{{1}}中,在第一次迭代期间,您将给定数字与第一个值进行比较,如果它们不匹配,则您已经返回true,因此循环可以'检查剩余的任何数字。
只需删除isUnique
中的else
parte,然后将循环中的最后if
更改为true而不是false。
这种方式只有在您检查完整个数组之后,您才能确定该数字是唯一的。
我也会把你发送给那个methis return
,所以你不要检查整个数组,只检查已注册的数量。