Создание собственного класса в java с использованием блоков try-catch, filewriter и printwriter
Попытка окружить этот код блоком try-catch. Тем не менее, после многих неудачных попыток я все еще не могу заставить его выбросить мое сообщение об исключении CUSTOM, когда пользователь вводит баланс меньше 0. Я пытаюсь сделать его чрезвычайно простым для целей обучения. У меня есть основной бросок IOException и InvalidException, однако я не могу понять, как вызвать пользовательское сообщение об исключении. Я удалил его, чтобы код выглядел более простым для зрителей. Любой логический совет о том, как мне следует исправить это? ЛЮБАЯ обратная связь приветствуется.
import java.util.Scanner;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
public class TestAccountWithException
{
public static void main(String[] args) throws IOException, InvalidBalanceException
{
// variable declaration
String fileName;
String firstName;
String lastName;
double balance;
int id = 1122;
final double RATE = 4.50;
Scanner input = new Scanner(System.in);
System.out.print("Please enter file name: ");
fileName = input.next();
File fw = new File(fileName);
// check if file already exists
while(fw.exists())
{
System.out.print("File already exists, enter valid file name: ");
fileName = input.next();
fw = new File(fileName);
}
System.out.print("Enter your first name: ");
firstName = input.next();
System.out.print("Enter your last name: ");
lastName = input.next();
// combine first and last name
String fullName = firstName.concat(" " + lastName);
System.out.print("Input beginnning balance: ");
balance = input.nextDouble();
// pass object to printwriter and use pw to write to the file
PrintWriter pw = new PrintWriter(fw);
// print to created file
pw.println(firstName);
pw.println(lastName);
pw.println(balance);
pw.println(id);
pw.println(RATE);
AccountWithException acctException = new AccountWithException(fullName, balance, 1122, 4.50);
System.out.println(acctException.toString());
} // end main
} // end class
// Account with exception class
public class AccountWithException {
private int id;
private double balance;
private static double annualInterestRate;
private java.util.Date dateCreated;
// CRE additions for lab assignment
private String name;
// no-arg constructor to create default account
public AccountWithException() {
this.dateCreated = new java.util.Date();
}
// constructor for test account with exception that takes in arguments
public AccountWithException(String newName, double newBalance, int newId, double newRate) {
this.name = newName;
this.balance = newBalance;
this.id = newId;
AccountWithException.annualInterestRate = newRate;
this.dateCreated = new java.util.Date();
}
// accessor methods
public int getId() {
return this.id;
}
public double getBalance() {
return this.balance;
}
public static double getAnnualInterestRate() {
return annualInterestRate;
}
public double getMonthlyInterest() {
return this.balance * (this.annualInterestRate / 1200);
}
public java.util.Date getDateCreated() {
return this.dateCreated;
}
public String getName() {
return this.name;
}
// mutator methods
public void setId(int newId) {
this.id = newId;
}
public void setBalance(double newBalance) throws InvalidBalanceException {
if(balance >= 0) {
this.balance = newBalance;
}
else {
throw new InvalidBalanceException(balance);
}
}
public static void setAnnualInterestRate(double newAnnualInterestRate) {
annualInterestRate = newAnnualInterestRate;
}
public void setName(String newName) {
this.name = newName;
}
// balance modification methods
public void withdraw(double amount) {
this.balance -= amount;
}
public void deposit(double amount) {
this.balance += amount;
}
// override of Object method
public String toString() {
// return string with formatted data
// left-align 20 character column and right-align 15 character column
return String.format("%-20s%15d\n%-20s%15tD\n%-20s%15s\n%-20s%15.2f%%\n%-20s%,15.2f\n",
"ID:", this.id,
"Created:", this.dateCreated,
"Owner:", this.name,
"Annual Rate:", this.annualInterestRate,
"Balance:", this.balance);
}
}
public class InvalidBalanceException extends Exception {
private double balance;
public InvalidBalanceException(double balance) {
// exceptions constructor can take a string as a message
super("Invalid Balance " + balance);
this.balance = balance;
}
public double getBalance() {
return balance;
}
}
1 ответ
Вы бросаете свое исключение из setBalance()
метод, но вы не вызываете его в своем конструкторе. Вы просто устанавливаете значение непосредственно в переменной члена.
Попробуйте это вместо этого:
// constructor for test account with exception that takes in arguments
public AccountWithException(String newName, double newBalance, int newId, double newRate) throws InvalidBalanceException {
setName(newName);
setBalance(newBalance);
setId(newId);
setAnnualInterestRate(newRate);
this.dateCreated = new java.util.Date();
}
Кроме того, ваш setBalance
Метод не будет работать, вы проверяете, является ли существующий баланс недопустимым, а не новое значение.
Попробуйте это вместо этого:
public void setBalance(double newBalance) throws InvalidBalanceException {
if (newBalance >= 0) {
this.balance = newBalance;
} else {
throw new InvalidBalanceException(balance);
}
}