Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java运行时日期语法错误-轻松修复?_Java_Date - Fatal编程技术网

java运行时日期语法错误-轻松修复?

java运行时日期语法错误-轻松修复?,java,date,Java,Date,我试图使每个事务都有时间戳,但我对date对象有一个问题。每次程序到达构造函数时,我都会遇到语法错误。有什么想法吗 非常感谢你 更新:我更改了它,使构造函数类现在显示: 但是现在我在MainMenu方法中一调用空指针表达式就遇到了它。我如何让它在所有方法(如数组列表)中工作 /** * Bank Account * * @author: Seth Killian * @version: 1. * @citations: All okay. Adapted online tutoria

我试图使每个事务都有时间戳,但我对date对象有一个问题。每次程序到达构造函数时,我都会遇到语法错误。有什么想法吗

非常感谢你

更新:我更改了它,使构造函数类现在显示: 但是现在我在MainMenu方法中一调用空指针表达式就遇到了它。我如何让它在所有方法(如数组列表)中工作

/**
 * 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,我在这里标记了日期数据,所以对于这段代码,它是绝对正确的。。在你评论别人的代码之前,请先阅读它。