我正在尝试做我的java任务。我正在努力解决一些问题。我无法使程序计算并输出所需的信息。当我尝试运行程序并输入社会安全号码时,我收到错误消息和消息
线程中的异常" main" java.lang.ArrayIndexOutOfBoundsException:0 在Salaries.inputData(Salaries.java:34)at Salaries.main(Salaries.java:18)
我做错了什么?
感谢。
这是我想要做的程序的描述。
编写一个程序,从键盘上读取社会安全号码和工资(只需阅读3或4即可开始测试)。读入数据后,程序应该为每个人的工资增加2%的加薪。在你加注之后,打印出3个格式正确的信息栏(社交,加薪前的薪水,加薪后的薪水)。您将需要一个持有新工资的第三个阵列。输入,提升和输出应使用单独的方法。
这是我到目前为止的代码。
import java.util.Scanner;
公共类薪水{
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner (System.in);
int[] ssNumbers = new int [10];
double[] salaries = new double [10];
int c;
int rais;
c = inputData (ssNumbers, salaries);
raise (salaries, c, ssNumbers);
output (ssNumbers, salaries, nSalary);
}
public static int inputData (int[]ssn, double[]sals){
int c = 0;
Scanner input = new Scanner (System.in);
int ssNum;
System.out.print("Enter social security number");
ssNum = input.nextInt();
while (ssNum != -1) //using while loop.
{
ssn[c] = ssNum;
System.out.print("Enter salary");
sals[c] = input.nextDouble();
c++;
System.out.print("Please input next security numbers or -1 to quit");
ssn[c] = input.nextInt();
}
return c;
}
public static void raise ( double[] salaries, int c, int[] ssNumbers)
{
double salar;
double rais = 0.02;
for (int count = 0; count < c; count++ )
rais+= rais;
System.out.printf("the salary after raise is %f\n", rais);
return;
}
public static void output (int[] ssNumbers, double[] salaries, double[] nSalary )
{
System.out.printf("%10d%-20d%-20f%", ssNumbers, salaries, nSalary);
return;
答案 0 :(得分:1)
这些陈述:
int[] ssNumbers = new int [0];
double[] salaries = new double [0];
double[] nSalary = new double[0];
创建一个大小为0的数组。因此,当您尝试向该数组添加元素时,您将添加到大于数组大小的索引。我会使用ArrayList
,所以如果你不知道长度,你可以在幕后动态增长你的数组。
如果必须使用数组,请确保它们足够大以容纳您想要输入的数据,例如
int[] ssNumbers = new int [maxSize];
答案 1 :(得分:0)
函数c
中inputData
的值超出了ssn[]
(或者sals[]
的长度,在代码中无法说明。您的边界检查已关闭,请尝试确保c
永远不会小于0
,或大于ssn[]
的大小。
答案 2 :(得分:0)
您正在以下语句中将数组初始化为0,
int[] ssNumbers = new int [0];
double[] salaries = new double [0];
您正试图在下面的语句(inputData
函数内部)
ssn[c] = ssNum;
这是错误
您正在阅读直到用户输入-1,这意味着您事先并不知道数据/用户输入的数量。使用LinkedList代替数组。