我的java程序有一些问题

时间:2014-04-08 21:17:17

标签: java arrays

我正在尝试做我的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;

3 个答案:

答案 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)

函数cinputData的值超出了ssn[](或者sals[]的长度,在代码中无法说明。您的边界检查已关闭,请尝试确保c永远不会小于0,或大于ssn[]的大小。

答案 2 :(得分:0)

您正在以下语句中将数组初始化为0,

int[] ssNumbers = new int [0];
double[] salaries = new double [0];

您正试图在下面的语句(inputData函数内部)

中读取过去0
ssn[c] =  ssNum;

这是错误

您正在阅读直到用户输入-1,这意味着您事先并不知道数据/用户输入的数量。使用LinkedList代替数组。