UserInput方法继续在java中分配不同的值

时间:2016-03-16 03:12:50

标签: java methods

这是我在网站上的第一个问题。我是一名新的CS学生,需要一些可能非常简单的帮助。代码将编译。当我按程序要求输入值时,它会将值存储错误。它将存储总支付和储蓄率的正确值,但即使输入6.9,IRA费率也会恢复为100%,并且它似乎将IRA费率存储在saveAmount中。请停下来弄清楚我在这里做错了什么。

import java.text.DecimalFormat;
import java.util.*;

public class CollinDunn_1_05 {

   static Scanner console = new Scanner(System.in);
   static DecimalFormat formatCash = new DecimalFormat("#,###.00");
   static double iraTotal = 0.0;
   static double saveAmount = 0.0;
   static double totalSave = 0.0;
   static String line = "";

   public static void main (String [] args) {

      // Input variables
      double grossPay = 0.0;  // The gross pay from a users paycheck
      double saveRate = 0.0;  // This is the user entered savings rate
      double iraRate= 0.0;    // The IRA investment rate
      String whichOne = "";   // A temp variable to pass a string type into UserInput

      printInfo();                      
      grossPay = userInput("gross pay");
      saveRate = userInput("savings rate");
      iraRate = userInput("IRA rate");
      iraTotal = iraAmount(grossPay, iraRate);
      saveAmount = savingsAmount(grossPay,  saveRate);
      outputResults(grossPay, saveRate, saveAmount, iraRate, iraTotal);     

      return;      

   } // End Main

   public  static void printInfo() {

     System.out.println ("This program uses methods to calculate \n"
                                           + "savings amounts and IRA investment amounts \n"
                                           + "from user input consisiting of their gross pay, \n"
                                           + "their desired savings rate and IRA rate, made by "
                                           + " Collin Dunn");
      return;

   } // End ProgramInfo

   public static double userInput(String whichOne) {

      double saveMe = 0.0;
      System.out.print("Please enter your " + whichOne + ":    ");
      saveMe = console.nextDouble(); 

      return saveMe;

   } // End userInput

    public static double iraAmount(double grossPay, double iraRate) {                                                                                                
       iraTotal = grossPay * (iraRate / 100.0);

      return iraTotal;

   } // End iraAmount

   public static double savingsAmount(double grossPay, double saveRate) {       
      saveAmount = grossPay * (saveRate / 100.0);

      return saveAmount;

   } // End savingsAmount


   public static void outputResults(double grossPay, double saveRate, double iraRate, 
                                                                      double saveAmount, double iraTotal) {


       totalSave = saveAmount + iraTotal;

       System.out.print ("With a gross pay of $" + formatCash.format(grossPay)
                                         + ", a savings rate of %" + formatCash.format(saveRate)
                                         + " and a IRA rate of %" +formatCash.format(iraRate)
                                         + ".\n Your savings amount will be $" + formatCash.format(saveAmount)
                                         + ", with a investment amount of $" + formatCash.format(iraTotal)
                                         + ".\n Which leaves you with a total savings of $" +
                                         +  totalSave + ". Way to go for paying yourself!" );

      return;

   } // End outputResults

} //End Class

1 个答案:

答案 0 :(得分:0)

您唯一的问题是您传递给outputResults()方法或已设置的参数的顺序。

将方法的签名更改为:

   public static void outputResults(double grossPay, double saveRate, double saveAmount, double iraRate, double iraTotal) {

现在匹配您调用方法的方式:

outputResults(grossPay, saveRate, saveAmount, iraRate, iraTotal); 

让我提出一些额外的建议:

1)您始终在方法签名中将参数命名为与全局变量相同的名称,这使得在访问方法中的变量时会产生混淆。要么避免对方法输入变量使用相同的名称,要么使用类似this.amount = amount之类的名称来使其更明显地表达您的意图。

2)除非您有正当理由使用它,否则请避免静电(这种情况非常罕见)。 相反,利用Java的面向对象特性,在main方法中创建类的实例,并在该实例上调用方法。这将使您的代码更具可读性,可靠性和可重用性。

3)在返回类型' void'的方法中,您不需要添加空return;语句。

为了纠正您的问题并展示我列出的要点,我已经重构了您的代码并在下面提供了它。顺便说一下,你有很大的潜力。尽管您可以改进一些细节,但作为第一年的CS学生,您的代码写得很好并且经过深思熟虑。干得好!

import java.text.DecimalFormat;
import java.util.*;

public class CollinDunn_1_05 {

   DecimalFormat formatCash = new DecimalFormat("#,###.00");
   double iraTotal = 0.0;
   double saveAmount = 0.0;
   double totalSave = 0.0;
   double grossPay = 0.0;  // The gross pay from a users paycheck
   double saveRate = 0.0;  // This is the user entered savings rate
   double iraRate= 0.0;    // The IRA investment rate

    public CollinDunn_1_05(double gross, double saveRt, double iraRt){
      this.grossPay = gross;
      this.saveRate = saveRt;
      this.iraRate = iraRt;
    }

    public void calculate(){
      calcIraAmount();
      calcSavingsAmount();
    }

   public static void main (String [] args) {
      Scanner scanner = new Scanner(System.in);
      printInfo();                      

      CollinDunn_1_05 program = new CollinDunn_1_05(
          userInput("gross pay", scanner),
          userInput("savings rate", scanner),
          userInput("IRA rate", scanner)
        );

      program.calculate();
      program.outputResults();

   } // End Main

   public static void printInfo() {

     System.out.println ("This program uses methods to calculate \n"
                                           + "savings amounts and IRA investment amounts \n"
                                           + "from user input consisiting of their gross pay, \n"
                                           + "their desired savings rate and IRA rate, made by "
                                           + " Collin Dunn");
      return;

   } // End ProgramInfo

   public static double userInput(String whichOne, Scanner console) {
      double saveMe = 0.0;
      System.out.print("Please enter your " + whichOne + ":    ");
      saveMe = console.nextDouble(); 

      return saveMe;

   } // End userInput

    public void calcIraAmount() {    
      iraTotal = grossPay * (iraRate / 100.0);
   } // End iraAmount

   public void calcSavingsAmount() {       
      saveAmount = grossPay * (saveRate / 100.0);
   } // End savingsAmount


   public void outputResults() {
      totalSave = saveAmount + iraTotal;
      System.out.print ("With a gross pay of \$" + formatCash.format(grossPay)
                                         + ", a savings rate of %" + formatCash.format(saveRate)
                                         + " and a IRA rate of %" +formatCash.format(iraRate)
                                         + ".\n Your savings amount will be \$" + formatCash.format(saveAmount)
                                         + ", with a investment amount of \$" + formatCash.format(iraTotal)
                                         + ".\n Which leaves you with a total savings of \$" +
                                         +  totalSave + ". Way to go for paying yourself!" );

   } // End outputResults

} //End Class