Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用if和while接受数组中的元素_Java_Arrays_If Statement_While Loop - Fatal编程技术网

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

Java 使用if和while接受数组中的元素,java,arrays,if-statement,while-loop,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];

我写了一个程序,它有一个由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;
                    }
                }
            }
        }
    }
}
import java.util.*;
公共类Arr{
公共静态void main(字符串[]args){
int[]arr=新的int[4];
扫描仪sc=新的扫描仪(System.in);
整数;
而(arr.length<5){
System.out.print(“输入1-4之间的数字:”);
编号=sc.nextInt();
如果(4号){
System.out.print(“拒绝!请重新输入1-4:”)中的数字;
}
否则{
对于(int j=0;j

但是逻辑上有点不对劲,我想不出来帮助

在这种情况下,一组输入的数字更符合逻辑

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);
}
Set inputs=new HashSet();
扫描仪sc=新的扫描仪(System.in);
while(inputs.size()<5){
整数=sc.nextInt();
如果(4号){
//拒绝
}
if(输入。包含(编号)){
//拒绝
}
输入。添加(编号);
}

在这种情况下,一组输入的数字更符合逻辑

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);
}
Set inputs=new HashSet();
扫描仪sc=新的扫描仪(System.in);
while(inputs.size()<5){
整数=sc.nextInt();
如果(4号){
//拒绝
}
if(输入。包含(编号)){
//拒绝
}
输入。添加(编号);
}

我发现至少有两个问题:

  • 您有一个无限循环:

    while(arr.length < 5)
    
    while(arr.length<5)
    
    arr.length
    是4,4总是小于5

  • 在for循环中,执行
    arr[j]=number一旦发现数组中有一个元素与输入的数字不同。那是错误的。只有当所有数字都与输入的数字不同时,才能分配该数字。而且,我猜,你必须把它存储在第一个还没有包含数字的位置


  • 我建议您将问题分成几个最简单的部分,作为方法实现。例如,您可能有一个方法
    isnumberreadyinarray()

    我发现至少有两个问题:

  • 您有一个无限循环:

    while(arr.length < 5)
    
    while(arr.length<5)
    
    arr.length
    是4,4总是小于5

  • 在for循环中,执行
    arr[j]=number一旦发现数组中有一个元素与输入的数字不同。那是错误的。只有当所有数字都与输入的数字不同时,才能分配该数字。而且,我猜,你必须把它存储在第一个还没有包含数字的位置

  • 我建议您将问题分成几个最简单的部分,作为方法实现。例如,您可以有一个方法
    isnumberReadyInArray()

    您应该使用
    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
    
    让计数器跟踪数组中的位置(初始化为0)
    做
    获取输入
    如果输入>=1,输入4
    将元素设置为输入
    增量计数器
    断环
    当输入<1或输入>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
    
    让计数器跟踪数组中的位置(初始化为0)
    做
    获取输入
    如果输入>=1,输入4
    将元素设置为输入
    增量计数器
    断环
    当输入<1或输入>4或计数器<数组长度时
    

    最后使用伪代码编写程序。

    有多种错误:
    arr.length
    不会更改,因为数组具有固定长度,您需要计算有效输入。此外,在出现“已存在”错误后,您希望进入下一个循环迭代,而不是读取另一个数字。有多个错误:
    arr.length
    不会更改,因为ar