java运行时日期语法错误-轻松修复?
我试图使每个事务都有时间戳,但我对date对象有一个问题。每次程序到达构造函数时,我都会遇到语法错误。有什么想法吗 非常感谢你 更新:我更改了它,使构造函数类现在显示: 但是现在我在MainMenu方法中一调用空指针表达式就遇到了它。我如何让它在所有方法(如数组列表)中工作java运行时日期语法错误-轻松修复?,java,date,Java,Date,我试图使每个事务都有时间戳,但我对date对象有一个问题。每次程序到达构造函数时,我都会遇到语法错误。有什么想法吗 非常感谢你 更新:我更改了它,使构造函数类现在显示: 但是现在我在MainMenu方法中一调用空指针表达式就遇到了它。我如何让它在所有方法(如数组列表)中工作 /** * Bank Account * * @author: Seth Killian * @version: 1. * @citations: All okay. Adapted online tutoria
/**
* Bank Account
*
* @author: Seth Killian
* @version: 1.
* @citations: All okay. Adapted online tutorials in using the scanner tools to create a menu and list array.
*/
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Scanner;
//import java.util.Calendar;
public class BankAccount
{
private double minbalance; // Minimum allowable account balance
private double maxdeposit; // Maximum allowable deposit
private double balance; // Account balance
private double rate; // Rate of annual interest in value of percent
private String AcctName; // Account name
private ArrayList<String> transactions;
public Date dateobj;
public DateFormat df;
/**
* Constructor for Bank Account Class with Starting Balance
* @param: Starting Balance
* @return: None
*/
public BankAccount(double startBalance)
{
DateFormat df = new SimpleDateFormat("MM/dd/yy HH:mm");
Date dateobj = new Date();
transactions = new ArrayList<String>();
balance = startBalance;
transactions.add("+ $" + startBalance + " Initial Balance " + df.format(dateobj) + " Bal: $" + balance);
minbalance = 0.25;
maxdeposit = 5000.00;
rate = 6; // Six percent annual interest
AcctName = "Seth Killian";
}
/**
* Main Menu which allows the user to select from options
* @param: None
* @return: None
*/
public void MainMenu()
{
Scanner in = new Scanner (System.in);
switch (in.nextInt())
{
case 0:
Initialize();
case 1:
System.out.println("Balance: $" + balance + " as of " + df.format(dateobj));
SelectOption();
case 2: //Make a deposit
double amount;
System.out.print("Deposit Amount: $");
amount = in.nextDouble();
if (!(amount > 0) || (amount > maxdeposit))
{transactions.add("* Attempted Deposit: $" + amount + " " + df.format(dateobj));}
if (!(amount > 0))
{System.out.println("Error: Amount must be greater than zero");}
else if (amount > maxdeposit)
{System.out.println("Error: Maximum Deposit $" + maxdeposit + ".");}
else
{
balance += amount;
transactions.add("+ $" + amount + " Deposit " + df.format(dateobj) + " Bal: $" + balance);
System.out.println("Success: Deposited $" + amount + " Balance: $" + balance);
}
SelectOption();
case 3: //Make a withdrawl
System.out.print("Withdrawl Amount: $");
amount = in.nextDouble();
if (!(amount > 0) || (amount > balance) || (balance-amount < minbalance))
{transactions.add("* Attempted Withdrawl: $" + amount + " " + df.format(dateobj));}
if (!(amount > 0))
{System.out.println("Error: Amount must be greater than zero");}
else if (amount > balance)
{System.out.println("Error: Insufficent Funds");}
else if (balance-amount < minbalance)
{System.out.println("Error: Minimum Balance $" + minbalance + ".");}
else
{
balance -= amount;
transactions.add("- $" + amount + " Withdrawl " + df.format(dateobj) + " Bal: $" + balance);
System.out.println("Success: Withdrew $" + amount + " Balance: $" + balance);
}
SelectOption();
case 4: //Apply Annual Interest
balance = balance + (balance * (rate/100.0));
transactions.add("Interest ("+ rate + "%) "+ df.format(dateobj) + " Bal: $" + balance);
System.out.println("Success: " + rate + "% Interest rate applied. Balance: $" + balance);
SelectOption();
case 5: // Print Log
System.out.println();
System.out.println("Transaction Log for " + AcctName);
System.out.println("---------------------------------------- ");
for(int x = 0; x < transactions.size(); x++)
{System.out.println(transactions.get(x));}
System.out.println("---------------------------------------- ");
SelectOption();
case 6: // Exits application
System.exit(0);
default: // Unrecognized Selection
System.out.println ("Error: Selection Unrecognized");
SelectOption();
}
}
/**
* Sets the Main Menu up
* @param: None
* @return: None
*/
public void Initialize()
{
System.out.print('\u000C'); // Clears the terminal screen
System.out.println("Welcome " + AcctName + "!");
System.out.println("======================================== ");
System.out.println("1) Check Balance\n2) Make a Deposit\n3) Make a Withdrawl\n4) Add Annual Interest\n5) Transaction Logs");
System.out.println("\n0) Clear Screen\n6) Exit Application");
System.out.println("======================================== ");
SelectOption();
}
/**
* Allows the user to make a selection.
* @param: None
* @return: None
*/
public void SelectOption()
{
System.out.print ("Selection: ");
MainMenu();
}
}
从
模式中不在['a'..'z']和['a'..'z']范围内的任何字符将被视为引用文本。例如,像“:”、“.”、“.”、和“@”这样的字符将出现在生成的时间文本中,即使它们没有包含在单引号中
df = new SimpleDateFormat("MM'/'dd'/'yy HH:mm");
包含任何无效模式字母的模式将导致在格式化或解析期间引发异常
因此,您的代码行df=newsimpledateformatmm/dd/yy HH:mm;由于/,将引发异常。尝试将/放在单引号中
df = new SimpleDateFormat("MM'/'dd'/'yy HH:mm");
与@DavidColer的回答一样,您从不初始化日期对象
使现代化
经测试,df=新简化格式TMM/dd/yy HH:mm;将在没有单引号的情况下工作。我应该看看Oracle的文档
您需要通过传递double来创建BankAccount类的实例,例如BankAccount ba=new BankAccount100.0;或者在类中添加默认构造函数。像下面这样
public BankAccount() {
this(0.25);
}
您从未完全初始化日期
DateFormat simpleDateFormat = new SimpleDateFormat("MM/dd/yy HH:mm");
Date date = new Date();
System.out.println(simpleDateFormat.format(date));
我没有看到任何地方使用重载构造函数,甚至没有实例化bankaccount类的实例,代码中的实例在哪里?如果未使用重载构造函数,则应创建默认构造函数来实例化varibales
public class BankAccount
{
final private double MINBALANCE; // Minimum allowable account balance
final private double MAXDEPOSIT; // Maximum allowable deposit
private double balance; // Account balance
private double rate; // Rate of annual interest in value of percent
private String AcctName; // Account name
private ArrayList<String> transactions;
public Date dateobj;
public DateFormat df;
public BankAccount()
{
MINBALANCE = 25.00; // Minimum allowable account balance this should be all caps for a constant
MAXDEPOSIT = 5000.00; // Maximum allowable deposit should also be a constant
balance = 0.0;
rate = 0.0;
AcctName = null;
transactions = new ArrayList<String>(10);
dateobj = new Date();
df = new SimpleDateFormat("MM/dd/yy HH:mm");
}
)
像这样您是否仔细检查了代码以确定问题发生的确切位置?我更新了我的答案以解决您的更新。。。。看看我的代码,我没有dateobj,我在这里标记了日期数据,所以对于这段代码,它是绝对正确的。。在你评论别人的代码之前,请先阅读它。