我按照我想要的方式运行程序。我正在努力使程序为每位员工的工资增加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;
}
}
答案 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;
}
}