gpt4 book ai didi

java - 输入之间的空间不会给数组索引带来异常?

转载 作者:太空宇宙 更新时间:2023-11-04 10:05:57 24 4
gpt4 key购买 nike

我不确定该问题的标题是什么(如果有人输入了该问题的名称,请告诉我)。我的程序要求用户提供 5 个 int 和 5 个 double。然后这些数字被放入一个数组中,并将其传递给一个方法来获取平均值。我的问题是,如果我用空格分隔用户输入并按 Enter 键(例如,5 space 6...enter;它允许我输入超出数组索引中允许的内容。为什么它不会给你一个错误?你如何防止这种情况?另外,关于我如何编写代码的任何建议也会很有帮助!

这是代码。

import java.util.*;

public class Lab7A_BRC{
public static void main(String[] args) {
System.out.println("\t\t Average arrays ");
Scanner input = new Scanner(System.in);

//array count varriable
int n = 5;

//array declaration
int [] list1 = new int[n];
double [] list2 = new double[n];

System.out.print("Enter 5 integer values. ");
for(int i = 0; i < n; i++) {
list1[i]= input.nextInt();


if(i == (n - 1)){

System.out.println("\t The average of the 5 integers is "
+ average(list1, n));

}
}

System.out.println("Enter 5 double values. ");
for (int i = 0; i < n; i++){
list2[i]= input.nextDouble();

if(i == (n-1)){
System.out.println("\t The average of the 5 doubles is "
+ average(list2, n));
}

}
}
public static int average(int[] array, int n){
int sum = 0;
for(int i = 0; i < n; i++){
int holdNumber = array[i];
sum += holdNumber;
}

int average = sum / n;
return average;

}

public static double average(double[] array, int n){
double sum = 0;
for(int i = 0; i < n ; i++){
double holdNumber = array[i];
sum += holdNumber;
}
double average = sum / n;
return average;
}
}

最佳答案

它不会给您错误,因为您只读取了前 5 个值,如 for 循环中所述。

第一件事是您应该将输入逻辑与输出逻辑解耦,这样当您退出 for 循环时,您就可以确定自己处于第五个数字中。

然后你可以检查除了空白字符串之外是否还有其他东西,如果有的话你可以抛出一个异常,指出它有太多数字。

我已经调整了整数部分,您可以轻松调整 double 逻辑。

如果您有任何疑问,请随时询问。

改编后的代码:

import java.util.Scanner;

public class Lab7A_BRC {

public static void main(String[] args) {
System.out.println("\t\t Average arrays ");
Scanner input = new Scanner(System.in);

//array count varriable
int n = 5;

//array declaration
int[] list1 = new int[n];
double[] list2 = new double[n];

System.out.print("Enter 5 integer values. ");
for (int i = 0; i < n; i++) {
list1[i] = input.nextInt();
}

if (!input.nextLine().equals("")) {
throw new RuntimeException("Too many numbers entered!");
}

System.out.println("\t The average of the 5 integers is "
+ average(list1, n));


System.out.println("Enter 5 double values. ");
for (int i = 0; i < n; i++) {
list2[i] = input.nextDouble();

if (i == (n - 1)) {
System.out.println("\t The average of the 5 doubles is "
+ average(list2, n));
}

}
}

public static int average(int[] array, int n) {
int sum = 0;
for (int i = 0; i < n; i++) {
int holdNumber = array[i];
sum += holdNumber;
}

int average = sum / n;
return average;

}

public static double average(double[] array, int n) {
double sum = 0;
for (int i = 0; i < n; i++) {
double holdNumber = array[i];
sum += holdNumber;
}
double average = sum / n;
return average;
}
}

关于java - 输入之间的空间不会给数组索引带来异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52920542/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com