增加薪水

时间:2014-04-10 19:49:42

标签: java

我按照我想要的方式运行程序。我正在努力使程序为每位员工的工资增加2%的加薪。我的问题是节目的输出没有显示2%的提升。

这是我运行程序时得到的输出..

Enter social security number:12345678
Enter salary2000
Please input next security numbers or -1 to quit:12345677
Enter salary3000
Please input next security numbers or -1 to quit:-1
        Social Security Number                       Salaries             Salary After Raise
                      12345678                    2000.000000                       0.000000
                      12345677                    3000.000000                       0.000000

代码..

import java.util.Scanner;
public class Salaries {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner input = new Scanner (System.in);

    //Declaring variables
    int[] ssNumbers = new int [10];
    double[] salaries = new double [10];
    double[] nSalaries = new double [10];
    int c;

    c = inputData (ssNumbers, salaries); //calling input data method
    raise (salaries, c); // calling raise method
    output (ssNumbers, salaries, nSalaries); //calling output method
}
public static int inputData (int[]ssn, double[]sals){ // input method

    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(); //prompting user for input 
        c++;

        System.out.print("Please input next security numbers or -1 to quit:");
        ssNum = input.nextInt();  //prompting user for input 
    }
        return c;   
}
public static void raise (double[] salaries, int c) // raise method

{
    double[] salaryraise = new double [10];

    for (int i = 0; i < c; i++ )
    salaryraise[i] = salaries[i]*.02;

}
public static void output (int[] ssNumbers, double[] salaries, double[] salaryraise ) //output method
{
    System.out.printf("%30s %30s %30s\n", "Social Security Number", "Salaries", "Salary After Raise");
    for (int i = 0; i < salaries.length; i++)

        //output
        System.out.printf("%30d %30f %30f\n", ssNumbers[i], salaries[i], salaryraise[i]);

    return;
}
}

2 个答案:

答案 0 :(得分:4)

raise方法中,您创建一个名为salaryraise的本地数组,然后为其分配新数字,但不对其执行任何操作,并且它超出范围。

您发送给output nSalaries的数组已声明,但在将其发送到output之前永远不会被修改。

nSalaries作为第二个参数传递给raise,并让raise为该数组赋值,而不是声明本地数组并为其赋值。

答案 1 :(得分:1)

请参阅代码中的注释:

public static void raise (double[] salaries, int c) // raise method {
    double[] salaryraise = new double [10];

    // Here, you write to a new array and the original array isn't modified at all.
    for (int i = 0; i < c; i++ ) {
        salaryraise[i] = salaries[i]*.02;
    }
    // Change it for
    for (int i = 0; i < c; i++ ) {
        salaries[i] *= 1.02;
    }
}