使用Java中的scanner将对象添加到数组列表

使用Java中的scanner将对象添加到数组列表,java,Java,我有一个经典的“银行账户”作业问题。我已经学会了如何将对象添加到列表中,但我不知道如何通过用户输入来完成。我找不到正是我要找的东西 我想创建一个名为enterDetails的方法,该方法将提示用户输入“name”作为字符串,输入“amount”作为双精度。然后需要创建一个存储在ArrayListaccounts=new ArrayList()中的对象 需要重复该步骤,直到用户输入q退出 这是我到目前为止的代码,不确定我是否朝着正确的方向前进 class Bank { ArrayList&

我有一个经典的“银行账户”作业问题。我已经学会了如何将对象添加到列表中,但我不知道如何通过用户输入来完成。我找不到正是我要找的东西

我想创建一个名为
enterDetails
的方法,该方法将提示用户输入“name”作为字符串,输入“amount”作为双精度。然后需要创建一个存储在
ArrayListaccounts=new ArrayList()中的对象
需要重复该步骤,直到用户输入q退出

这是我到目前为止的代码,不确定我是否朝着正确的方向前进

class Bank
{
    ArrayList<Account>accounts = new ArrayList<>();

    public static void enterDetails()
    {
        int amount = Scanner.nextInt();    

        for (int i = 0; i < amount ; i++) {
            System.out.println("ENTER NAME");
            Scanner addName = new Scanner(System.in);
            String name = (addName.nextLine());

            System.out.println("Enter Current balance");
            Scanner addBalance = new Scanner(System.in);
            double balance = (addBalance.nextDouble());
        }

    }
}
类库
{
ArrayListCounts=新的ArrayList();
公共静态无效详细信息()
{
int amount=Scanner.nextInt();
对于(int i=0;i
创建Account类以创建Account数据类型后,创建Bank类:

package com.stackOverflow.practice.banking;
import java.util.*;
import java.lang.*;
import java.io.*;
import java.text.Collator;


public class App {

        public static void main(String... args) throws IOException, MyException{

        ArrayList<Account> ac = new ArrayList<Account>();
        Scanner scan = new Scanner(System.in);
        boolean isRunning = true;

        while(isRunning){
              System.out.println("Please enter your name in the account(quit to exit program): ");
              String name = scan.next();
              if(name.equalsIgnoreCase("quit")) {
                  break;
              }
              System.out.println("Please enter an amount for your account: ");
              double amount = scan.nextDouble();
              Account a = new Account(name, amount);
              ac.add(a);

         }

         for(Account t: ac) {
              System.out.println("Name: " + t.getName() + "\nAmount: " + t.getAmount());
              System.out.println();
         }

    }
}
在这里,我们只需使用私有字段名称和金额创建account类。正如您所指出的,名称必须是字符串,金额必须是双精度的,因此我们将它们设置为这些数据类型。然后我们创建一个构造函数来初始化这些私有字段,并在创建类的实例时给它们一个值。我们添加name和amount作为参数。这就是用户将值传递给构造函数的地方,以便实例字段是给定的值。然后,我们创建一个getName()和getAmount()方法,以测试对象是否正常工作:

在主代码中,我们创建了一个存储数据类型“Account”的Arraylist。然后,我们创建一个Scanner对象来存储用户输入。isRunning将是我们用来控制while循环的标志,但是在这种情况下,我们可以简单地说while(true),因为我们使用break语句而不是将isRunning设置为false。我只是想创建一个布尔表达式来澄清代码,但您也可以轻松地说while(true)。我们会提示用户输入他们的姓名。我们还创建了一个条件语句,如果用户输入quit(在您的例子中是q,因为您声明希望用户输入q作为quit),则该语句将中断循环。如果用户没有输入quit,我们将其名称存储在字符串变量中。然后提示用户输入一个double作为金额。我们将其存储在变量“amount”中。一旦我们有了这些值,我们就创建一个Account对象的新实例,并将用户输入的值传递给构造函数。然后,我们使用Arraylist.add(Object)方法将对象存储在Arraylist中

当我们最终打破循环时,我们为每个循环运行一个for,以确保对象正确地存储到Arraylist中。我们在Arraylist中的每个对象上显式调用getName()和getAmount()方法。正如我们从打印的输出中所看到的,对象被正确地存储

作为警告,这只是一段伪代码,解释了如何将对象存储到Arraylist。这不是一个详尽的解释,您必须根据自己的喜好修改代码。这是一个广泛而简单的例子

创建Account类以创建Account数据类型后,创建Bank类:

package com.stackOverflow.practice.banking;
import java.util.*;
import java.lang.*;
import java.io.*;
import java.text.Collator;


public class App {

        public static void main(String... args) throws IOException, MyException{

        ArrayList<Account> ac = new ArrayList<Account>();
        Scanner scan = new Scanner(System.in);
        boolean isRunning = true;

        while(isRunning){
              System.out.println("Please enter your name in the account(quit to exit program): ");
              String name = scan.next();
              if(name.equalsIgnoreCase("quit")) {
                  break;
              }
              System.out.println("Please enter an amount for your account: ");
              double amount = scan.nextDouble();
              Account a = new Account(name, amount);
              ac.add(a);

         }

         for(Account t: ac) {
              System.out.println("Name: " + t.getName() + "\nAmount: " + t.getAmount());
              System.out.println();
         }

    }
}
在这里,我们只需使用私有字段名称和金额创建account类。正如您所指出的,名称必须是字符串,金额必须是双精度的,因此我们将它们设置为这些数据类型。然后我们创建一个构造函数来初始化这些私有字段,并在创建类的实例时给它们一个值。我们添加name和amount作为参数。这就是用户将值传递给构造函数的地方,以便实例字段是给定的值。然后,我们创建一个getName()和getAmount()方法,以测试对象是否正常工作:

在主代码中,我们创建了一个存储数据类型“Account”的Arraylist。然后,我们创建一个Scanner对象来存储用户输入。isRunning将是我们用来控制while循环的标志,但是在这种情况下,我们可以简单地说while(true),因为我们使用break语句而不是将isRunning设置为false。我只是想创建一个布尔表达式来澄清代码,但您也可以轻松地说while(true)。我们会提示用户输入他们的姓名。我们还创建了一个条件语句,如果用户输入quit(在您的例子中是q,因为您声明希望用户输入q作为quit),则该语句将中断循环。如果用户没有输入quit,我们将其名称存储在字符串变量中。然后提示用户输入一个double作为金额。我们将其存储在变量“amount”中。一旦我们有了这些值,我们就创建一个Account对象的新实例,并将用户输入的值传递给构造函数。然后,我们使用Arraylist.add(Object)方法将对象存储在Arraylist中

当我们最终打破循环时,我们为每个循环运行一个for,以确保对象正确地存储到Arraylist中。我们在Arraylist中的每个对象上显式调用getName()和getAmount()方法。正如我们从打印的输出中所看到的,对象被正确地存储

作为警告,这只是一段伪代码,解释了如何将对象存储到Arraylist。这不是一个详尽的解释,您必须根据自己的喜好修改代码。这是一个广泛而简单的例子

到目前为止,它是否正常工作(如预期的那样)?不,它似乎不喜欢“int amount=Scanner.nextInt();”您能更具体一点吗?为什么?
Please enter your name in the account(quit to exit program): 
Simeon
Please enter an amount for your account: 
200.00
Please enter your name in the account(quit to exit program): 
Henry
Please enter an amount for your account: 
100.00
Please enter your name in the account(quit to exit program): 
Harry
Please enter an amount for your account: 
13.99
Please enter your name in the account(quit to exit program): 
quit
Name: Simeon
Amount: 200.0

Name: Henry
Amount: 100.0

Name: Harry
Amount: 13.99