使用if和while接受数组中的元素

时间:2014-02-02 12:47:57

标签: java arrays if-statement while-loop

我编写了一个程序,其中一个包含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;
                    }
                }
            }
        }
    }
}

但某些内容逻辑上错误,我无法理解...... 帮助

3 个答案:

答案 0 :(得分:2)

我看到至少有两个问题:

  1. 你有一个无限循环:

    while(arr.length < 5)
    

    arr.length为4,而4总是小于5.

  2. 在你的for循环中
  3. ,只要找到与输入的数字不同的数组中的一个元素,就会执行arr[j]=number;。那是错的。如果所有数字与输入的数字不同,则只能分配它。而且,我想,你必须将它存储在不包含数字的第一个位置。

  4. 我建议你把问题分成几个最简单的部分,作为方法实现。例如,您可以使用方法isNumberAlreadyInArray()

答案 1 :(得分:2)

while(arr.length < 5){

当您使用数组时,它具有固定大小。 arr.length 始终为4.出于同样的原因,您还必须跟踪有多少数组元素被“填充”。

if(number <= 0 || number > 4){

您应该使用whiledo-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);
}