2016-02-25 6 views
2

Таким образом, я продолжаю получать ответ 0 независимо от входных данных метода. Когда я ввожу 6 месяцев, 100 сбережения сумма, и 0.05 процентная ставка он должен дать мне 608.81, но ответ 0. Я чувствую, что это может быть мой цикл for или параметры, которые я установил, которые возились с ним. Я пробовал все, что я могу думать о петле for. Вот код:Почему этот метод всегда возвращает 0 в качестве возвращаемого значения?

import java.text.DecimalFormat; 
import javax.swing.JOptionPane; 

public class FifthAssignment2 { 

    static double savingAmount = 0.0; // the 2 given static doubles 
    static double annualInterestRate = 0.0; 
    static int numberOfMonth; 
    static double sixthMonth = 0.0;; 

    public static double compoundValueMethod(double savingAmount, double annualInterestRate, int NumberOfMonth) { 

     { 
     DecimalFormat formatter = new DecimalFormat(".00"); 

     double monthlyInterestRate = annualInterestRate/12; 

     if (savingAmount < 0) 
      if (annualInterestRate < 0) { 
       JOptionPane.showMessageDialog(null, "Error. Both of your values are negative!"); 
       System.exit(0); 
      } 

     if (savingAmount < 0) { 
      JOptionPane.showMessageDialog(null, "Error. Your savings amount is negative!"); 
     } 

     else if (annualInterestRate < 0) { 
      JOptionPane.showMessageDialog(null, "Error. Your annual interest rate is negative!"); 
     } 

     else { 
      for (int i = 0; i < numberOfMonth; i++) { 
       sixthMonth = ((savingAmount+sixthMonth) * (1 + monthlyInterestRate)); 
      } 
     } 
     return sixthMonth; 
     } 
    } 

    public static void main(String[] args) { 

     DecimalFormat formatter = new DecimalFormat(".00"); 

     int numberOfMonth;             


     String NOM = JOptionPane.showInputDialog("How many months? "); 
     numberOfMonth = Integer.parseInt(NOM); 

     String SA = JOptionPane.showInputDialog("What is your savings amount? "); 

     savingAmount = Double.parseDouble(SA); 

     String AIR = JOptionPane.showInputDialog("What is the annual interest rate? "); // Window pops up 
     annualInterestRate = Double.parseDouble(AIR); 

     { 
      JOptionPane.showMessageDialog(null, "Your total compounded value after 6 months is " 
        + compoundValueMethod(savingAmount, annualInterestRate, numberOfMonth)); 
     } 

    } 
} 

ответ

3

Вы передаете следующие переменные в ваш метод:

public static double compoundValueMethod(double savingAmount, 
             double annualInterestRate, 
             int NumberOfMonth) 

Примечание но использовать статическую переменную numberOfMonth в методе вместо переданного NumberOfMonth параметра (имена переменных в Java являются деликатный случай). numberOfMonth по умолчанию инициализируется 0, поэтому цикл for не вводится и метод возвращает 0.

Вы должны устранить статические переменные и использовать только локальные переменные. Если бы вы сделали это в первую очередь, вы получили бы ошибку компиляции, которая бы облегчила поиск вашей ошибки.

+0

Wow. Это все время для одного заглавного письма. Огромное спасибо!! – josh102894

+0

@ josh102894 Добро пожаловать – Eran

+0

, если вы не возражаете, я спрашиваю, как мне отформатировать его там, где он использует только два десятичных знака. ранее я использовал formatter.format – josh102894

0

использование NumberOfMonth вместо numberOfMonth

for (int i = 0; i < NumberOfMonth; i++) { 
       sixthMonth = ((savingAmount+sixthMonth) * (1 + monthlyInterestRate)); 
      } 

или внутри метода вы можете назначить

numberOfMonth=NumberOfMonth; 
1

Вам не нужно статические переменные. Обновить код, как показано ниже

общественного класса FifthAssignment2 {

public static double compoundValueMethod(double savingAmount, double annualInterestRate, int numberOfMonth) { 
    { 
     DecimalFormat formatter = new DecimalFormat(".00"); 
     double sixthMonth = 0.0; 
     double monthlyInterestRate = annualInterestRate/12; 

     if (savingAmount < 0) 
      if (annualInterestRate < 0) { 
       JOptionPane.showMessageDialog(null, "Error. Both of your values are negative!"); 
       System.exit(0); 
      } 

     if (savingAmount < 0) { 
      JOptionPane.showMessageDialog(null, "Error. Your savings amount is negative!"); 
     } 

     else if (annualInterestRate < 0) { 
      JOptionPane.showMessageDialog(null, "Error. Your annual interest rate is negative!"); 
     } 

     else { 
      for (int i = 0; i < numberOfMonth; i++) { 
       sixthMonth = ((savingAmount+sixthMonth) * (1 + monthlyInterestRate)); 
      } 
     } 
     return sixthMonth; 
    } 
} 




public static void main(String[] args) { 

    DecimalFormat formatter = new DecimalFormat(".00"); 

    int numberOfMonth;             


    String NOM = JOptionPane.showInputDialog("How many months? "); 
    numberOfMonth = Integer.parseInt(NOM); 


    double savingAmount; 

    String SA = JOptionPane.showInputDialog("What is your savings amount? "); 

    savingAmount = Double.parseDouble(SA); 






    String AIR = JOptionPane.showInputDialog("What is the annual interest rate? "); // Window 
    // pops 
    // up 

    double annualInterestRate; 
    annualInterestRate = Double.parseDouble(AIR); 

    { 
     JOptionPane.showMessageDialog(null, "Your total compounded value after 6 months is " 
       + compoundValueMethod(savingAmount, annualInterestRate, numberOfMonth)); 
    } 

} 

}

Смежные вопросы