Forums Register Login

static method data validation in a dialog box app

+Pie Number of slices to send: Send
This program uses 3 dialog boxes to gather data to use in a future value calculation. My progam gets to the first dialog box but then exits. Here is the code:

import javax.swing.*;
import java.text.*;
/**
*
* @author
*/
public class FutureValueApp {

/** Creates a new instance of FutureValueApp */
public FutureValueApp() {
}

public static void main(String[] args){
String choice = "";
try{while (!(choice.equalsIgnoreCase("x"))){

String paymentString = JOptionPane.showInputDialog(
null, "Enter monthly payment: ", "Future Value", JOptionPane.PLAIN_MESSAGE);
double monthlyPayment = parseMonthlyPay(paymentString);

String rateString = JOptionPane.showInputDialog(
null, "Enter yearly interest rate: ", "Future Value", JOptionPane.PLAIN_MESSAGE);
double interestRate = Double.parseDouble(rateString);
double monthlyInterestRate = interestRate/12/100;

String yearsString = JOptionPane.showInputDialog(
null, "Enter number of years: ", "Future Value", JOptionPane.PLAIN_MESSAGE);
int years = Integer.parseInt(yearsString);
int months = years * 12;

double futureValue = calculateFutureValue(monthlyPayment,
months, monthlyInterestRate);

NumberFormat currency = NumberFormat.getCurrencyInstance();
NumberFormat percent = NumberFormat.getPercentInstance();
percent.setMinimumFractionDigits(2);
String message =
"Monthly payment: " + currency.format(monthlyPayment) + "\n"
+ "Yearly interest rate: " + percent.format(interestRate/100) + "\n"
+ "Number of years: " + years + "\n"
+ "Future value: " + currency.format(futureValue) + "\n\n"
+ "To continue, press Enter.\n"
+ "To exit, enter 'x': ";
choice = JOptionPane.showInputDialog(null,
message, "Future Value", JOptionPane.PLAIN_MESSAGE);
}//end of try
}
catch(NullPointerException e) {// catch that handles exception of user pressing the cancel button
System.exit(0);

}
//System.exit(0);
}//end of main method

private static double parseMonthlyPay(String payString){
double monthlyPayment = 0;
boolean tryAgain = true;
while(tryAgain) {
try{
monthlyPayment = Double.parseDouble(payString);
while (monthlyPayment <=0){
payString = JOptionPane.showInputDialog(
"Invalid monthly payment. \n"
+ "Please enter a positive number: ");
monthlyPayment = Double.parseDouble(payString);
}

}

catch(NumberFormatException e){
payString = JOptionPane.showInputDialog(
"Invalid monthly payment. \n"
+ "Please enter a number");
}
}
return monthlyPayment;
}

private static double calculateFutureValue(double monthlyPayment,
int months, double interestRate){
int i = 1;
double futureValue = 0;
while (i <= months) {
futureValue = (futureValue + monthlyPayment) *
(1 + interestRate);
i++;
}
return futureValue;
}


}
+Pie Number of slices to send: Send
More on this app. Two static methods are used. parseMonthlyPay validates the first entry. It makes sure the monthly payment is a number and is positive. I want to eventually validate all inputs but I am doing this incrementally to make sure this is working first. The method calculateFutureValue takes the inputs monthly pay, interest rate, and years and comes up with the future value. Thanks.
+Pie Number of slices to send: Send
If you've got a lot of this in your code:



"e" is a message that Java sends you to tell you something's gone wrong. Your reaction is to discard it without even looking at it -- that's bad, right? Especially given that your program is exiting prematurely, it's exceedingly likely that this catch block, or another one like it, is swallowing up Java's explanation of something that's gone wrong and hiding it from you.

Never discard exceptions. Always log or display them in some way. In this particular case, just add an e.printStackTrace(), and I'll bet you'll immediately be pointed to the problem line of code.
+Pie Number of slices to send: Send
It is a lot of code. I am trying to do an exercise in a book. I guess the logic is solve the problem with long inefficient code and then when you master the skills solve things with code that is sleeker. Where would you declare the trace?
+Pie Number of slices to send: Send
 

Originally posted by Ernest Friedman-Hill:
Never discard exceptions. Always log or display them in some way. In this particular case, just add an e.printStackTrace(), and I'll bet you'll immediately be pointed to the problem line of code.



Or recover?
+Pie Number of slices to send: Send
 

Originally posted by Ken Blair:

Or recover?



Or recover. But even then, logging is prudent, most of the time.
I think he's gonna try to grab my monkey. Do we have a monkey outfit for this tiny ad?
a bit of art, as a gift, the permaculture playing cards
https://gardener-gift.com


reply
reply
This thread has been viewed 1861 times.
Similar Threads
Help with errors again
NullPointerException thrown in JOptionPane
Newbie Question : cannot resolve symbol : variable
One error in code..not understanding what it tells me. Code works it is on line 55.
Format the output
More...

All times above are in ranch (not your local) time.
The current ranch time is
Mar 28, 2024 20:05:09.