我遇到以下问题......我已经删除了代码中没有重要部分的内容,因此不会让人感到困惑。已经定义和/或初始化了所有其他符号/变量。
基本上我正在尝试做的是:
numsalchange是一个单独的方法,它在循环中确定indsaldif数组中的值是否为0.如果是,则当然会增加更改。
稍后会将更改发送到要显示的报告方法。我已经尝试了几种不同的方式,其值将会并且肯定不会等于0.但是,每次更改输出为0,当我知道它应该绝对是别的。
我尝试将此更改声明为
int change;
然后在方法中将其设置为零,但是如果没有在main中初始化,它将不允许我将它发送到方法。
我感觉它在报表方法中显示为0,因为它被初始化为零并发送到报告为0而不是更新的值。
public static void main blah(String[] args){
int change = 0;
numsalchange (userinput, change, indsaldif);
report (userinput, oldsalary, newsal, indsaldif, change);
public static void numsalchange(String[] userinput, int change, double[] indsaldif){
for ( int i=0; i<userinput.length; i++){
if(indsaldif[i] != 0){
change++;}}}
public static void report(String[] userinput, double[] oldsalary, double[] newsal, double[] indsaldif, int change){
DecimalFormat twoDigits = new DecimalFormat("0.00");
double saldiff = 0;
for( double i : indsaldif) {
saldiff += i;
}
String toString;
StringBuilder sb = new StringBuilder(64);
sb.append("PB Incorporated Salary Report \n");
for (int i = 0; i < userinput.length; i++) {
sb.append("---------- \nEmployee:"+ userinput[i] + "\nOld Salary: $"+ twoDigits.format(oldsalary[i]) + "\nNew Salary: $" + twoDigits.format(newsal[i]) + "\nSalary Change: $" + twoDigits.format(indsaldif[i])+"\n");
//**
}
sb.append("---------- \nTotal Employee Salary Increase: $" + twoDigits.format(saldiff) + "\n# of Salary Increases: " + change);
JOptionPane.showMessageDialog(null, sb.toString());}
}
答案 0 :(得分:2)
当您将change
传递给您的方法时,Java会传递该值的副本。该方法可能会更改副本,但不会反映在change
中声明的原始main
中。
要在整个班级中保持change
计数,请numsalchange
声明一个初始化为0的局部变量,并且可以根据需要增加它。然后它应该return
该值,main
可以将返回的值添加到change
。
答案 1 :(得分:1)
您可以从numsalchange返回更改
change = numsalchange (userinput, change, indsaldif);
...
public static void numsalchange(String[] userinput, int change, double[] indsaldif){
...
return change;
}
您也可以制作班级的change
变量静态字段
private static int change;