【问题标题】:How to validate data entered into an array if given a range? [duplicate]如果给定范围,如何验证输入到数组中的数据? [复制]
【发布时间】:2022-01-08 07:46:16
【问题描述】:

我对 Java 还很陌生,但我正在处理一项任务,我有点迷茫。声明了一个数组,其元素只能是大于 0 且小于 100 的数字。如果我运行我拥有的代码,它会要求我输入数组大小,然后输入数组值,但它接受 100 及以上的值。

如果输入小于零或 100 或更大,我如何返回类似“请仅输入 >0 和

package arrays;
import java.util.Scanner;
import java.util.stream.IntStream; 
public class ArrayAssignment {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        Scanner s = new Scanner(System.in);
 
        System.out.println("Enter array size: ");
        int size = s.nextInt();
     
        int[] Array = IntStream.rangeClosed(1, 99).toArray(); 
 
      
        System.out.println("Enter array values:  ");
        for (int i = 0; i < size; i++) {
            int value = s.nextInt();
            Array[i] = value;
 
        }
 
       
        int length = Array.length;
 
    
        int sum = 0;
 
      
        for (int i = 0; i < Array.length; i++) {
            sum += Array[i];
        }
 
        double average = sum / length;
        System.out.println("Average of array: " + average);
    }
}

运行代码: 输入数组大小: 10

输入数组值:
12 34 12 1 2 4 1 1100 10 14

数组平均值:61.0

【问题讨论】:

标签: java arrays


【解决方案1】:

在无限循环中不断检查输入,直到用户输入有效输入。

package arrays;
import java.util.Scanner;
import java.util.stream.IntStream; 
public class ArrayAssignment {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        
        Scanner s = new Scanner(System.in);
 
        while (true) {
            System.out.println("Enter array size: ");
            int size = s.nextInt();
            if (size < 100 && size > 0) {
                break;
            } else {
                System.out.println("Please enter values only >0 and <100");
            }
        }
     
        int[] Array = IntStream.rangeClosed(1, 99).toArray(); 
      
        System.out.println("Enter array values:  ");
        for (int i = 0; i < size; i++) {
            int value = s.nextInt();
            Array[i] = value;
        }

        int length = Array.length;
        int sum = 0;
      
        for (int i = 0; i < Array.length; i++) {
            sum += Array[i];
        }
 
        double average = sum / length;
        System.out.println("Average of array: " + average);
    }
}

【讨论】:

    【解决方案2】:

    您可以通过修改 for 循环以在定义中不包含 i++ 来仅允许特定输入,而仅在给出有效值时增加计数器。

    这个循环现在看起来像这样:

    for (int i = 0; i < size;) {
        System.out.println("Enter array values:  ");
        int value = s.nextInt();
        if (value > 100 || value <= 0) {
            System.out.println("Please enter values greater than 0 and less than or equal to 100.");
        } 
        else {
            Array[i] = value;
            i++;
        }
    }
    

    请注意,您也可以将其更改为 do-while 循环或 while 循环并获得相同的结果(这些结果可能更适合这种情况)。此外,当输入 charString 时,这仍然会中断,因为我没有为这些情况添加处理。

    补充说明:

    此外,我注意到您正在使用double average = sum / length;,它将执行整数除法,因此您永远不会得到小数结果。您可以通过将sum 转换为double 来解决此问题,然后再使用以下方法进行划分:

    double average = (double) sum / length;

    最后要查看的是您的int[] array = IntStream.rangeClosed(1, 99).toArray(); 行。我不确定您是否打算改用 int[] array = IntStream.rangeClosed(1, size).toArray(); 并根据用户输入的大小创建一个数组,但您可能还需要更改它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      相关资源
      最近更新 更多