我编写了一个程序,其中一个包含4个元素的数组,并且只接受数字从1到4(1,2,3, 4)并且每次我提示用户输入(仅1,2,3,4)并且每次检查数组是否已经有此输入...如果它有这个元素那么如果没有,用户必须提供另一个数字,然后将该元素存储在数组中。
这是我的代码: -
import java.util.*;
public class Arr{
public static void main(String[] args){
int[] arr = new int[4];
Scanner sc = new Scanner(System.in);
int number;
while(arr.length < 5){
System.out.print("Enter a number from 1-4 : ");
number = sc.nextInt();
if(number <= 0 || number > 4){
System.out.print("Rejected ! Please re-enter a number from 1-4 : ");
}
else{
for(int j = 0 ; j < arr.length ; j++){
if(number == arr[j]){
System.out.print("Already exists .. enter new number from 1-4 : ");
number = sc.nextInt();
}
else{
arr[j]=number;
break;
}
}
}
}
}
}
但某些内容逻辑上错误,我无法理解...... 帮助?
答案 0 :(得分:2)
我看到至少有两个问题:
你有一个无限循环:
while(arr.length < 5)
arr.length
为4,而4总是小于5.
,只要找到与输入的数字不同的数组中的一个元素,就会执行arr[j]=number;
。那是错的。如果所有数字与输入的数字不同,则只能分配它。而且,我想,你必须将它存储在不包含数字的第一个位置。
我建议你把问题分成几个最简单的部分,作为方法实现。例如,您可以使用方法isNumberAlreadyInArray()
。
答案 1 :(得分:2)
while(arr.length < 5){
当您使用数组时,它具有固定大小。 arr.length
始终为4.出于同样的原因,您还必须跟踪有多少数组元素被“填充”。
if(number <= 0 || number > 4){
您应该使用while
或do-while
循环来重复提示,直到用户输入正确的输入。
arr[j]=number;
这将把第一个不匹配的数组元素设置为输入数字。我确定不是你想要的东西。
如果您是初学者,最好写出一个计划应该如何运作的计划:
询问用户输入。
检查输入是否介于1到4之间 重复询问用户,直到提供有效输入为止 在有效输入时,如果输入已存在,则检查数组 如果是,请提醒用户并再次要求输入 如果不是,则将输入存储在数组中的下一个可用插槽中。
然后从中构建一个伪代码。例如:
have counter to track position in array (initialize to 0)
do
get input
if input >= 1 and input <= 4
loop: go through array from 0 to counter
if element at array = input
alert user
break loop
else if element at array is < 1 or > 4
set element as input
increment counter
break loop
while input < 1 or input > 4 or counter < array length
最后使用伪代码编写程序。
答案 2 :(得分:0)
在这种情况下,一组输入的数字会更合乎逻辑
Set<Integer> inputs = new HashSet<>();
Scanner sc = new Scanner(System.in);
while(inputs.size() < 5) {
Integer number = sc.nextInt();
if(number <= 0 || number > 4) {
// rejected
}
if(inputs.contains(number)) {
// rejected
}
inputs.add(number);
}