早上好,我正在学习 Java,我遇到了一个问题,我不知道解决方案是什么......我想将一定数量的数据(姓名,地址,金钱)添加到数组列表中,我做了一个for 循环以及执行变量时读取未正确完成。 当我使用nextLine读取变量0时,程序跳转到1,所以我没有输入我想要的信息量 现在,当我使用 next() 时,这不会发生,但是当我想输入一个以空格分隔的名称作为数据时,就像我使用 nextLine 一样完成相同的跳转......有没有人有任何建议? 数组
我的代码还没有完成,因为我不能离开这里
public static void main(String\[\] args) {
Scanner sc = new Scanner(System.in);
List <Cliente> lista = new ArrayList<Cliente>(); //declaracion y asignacion del ArrayList
Cliente clie = new Cliente();
System.out.println("De la cantidad de cientes a ingresar: ");
int n = sc.nextInt();
for (int i = 0; i < n; i ++) {
//lista.add(new Cliente("nico","ramos ",1,25000));
System.out.println("Al cliente se le asigno un numero de cliente");
clie.setCodigoCliente(i);
System.out.println("Ingrese el nombre del cliente " +i);
String nom;
clie.setNombre(nom = sc.nextLine());
System.out.println("Ingrese la direccion del cliente "+i);
String direccion;
clie.setDireccion(direccion = sc.nextLine());
}
}
public class Cliente {
int codCliente;
String nombre;
String direccion;
double credito;
public Cliente() { }
public Cliente(String nombre, String direccion, double credito) {
// this.codCliente = codCliente;
this.nombre = nombre;
this.direccion = direccion;
this.credito = credito;
}
// Getters and setters omitted for brevity
}
试试这个代码:
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
class ClientTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
List<Cliente> lista = new ArrayList<Cliente>(); //declaracion y asignacion del ArrayList Cliente clie = new Cliente();
System.out.println("Enter how many clients will be added:");
int n = sc.nextInt(); // if you will type here '2 abc' then
//n will be '2' and nextLine will be ' abc' that's why 'sc = new Scanner(System.in)' is used to reset the scanner
sc = new Scanner(System.in);
for (int i = 0; i < n; i++) {
Cliente cliente = new Cliente();
cliente.setCodigoCliente(i);
System.out.println("Enter number of client# " + i);
cliente.setNombre(sc.nextLine());
System.out.println("Enter direccion of client: " + i);
cliente.setDireccion(sc.nextLine());
lista.add(cliente);
}
System.out.println(lista);
}
}
class Cliente {
int codCliente;
String nombre;
String direccion;
double credito;
public Cliente() {
}
public Cliente(String nombre, String direccion, double credito) {
// this.codCliente = codCliente;
this.nombre = nombre;
this.direccion = direccion;
this.credito = credito;
}
@Override
public String toString() {
return "Cliente{" +
"codCliente=" + codCliente +
", nombre='" + nombre + '\'' +
", direccion='" + direccion + '\'' +
", credito=" + credito +
'}';
}
public void setCodigoCliente(int codCliente) {
this.codCliente = codCliente;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public void setDireccion(String direccion) {
this.direccion = direccion;
}
public void setCredito(double credito) {
this.credito = credito;
}
public int getCodCliente() {
return codCliente;
}
public String getNombre() {
return nombre;
}
public String getDireccion() {
return direccion;
}
public double getCredito() {
return credito;
}
}
如果你的班级的主要目的
Cliente
是透明和不变地传达数据,将你的班级定义为记录。
public record Cliente ( String nombre , String direccion , double credito ) {}
在实例化客户端之前使用扫描仪收集所有需要的数据。通常最好将用户界面与其他代码分开。
Scanner scanner = …
int countOfClients = … ;
List< Cliente > clientes = new ArrayList < Cliente >( countOfClients ); // Where convenient, specify the initial capacity of a new ArrayList.
…
for( int nthCliente = 1 , nthCliente <= countOfClients , nthCliente ++ )
{
// Gather inputs from user-interface.
String n = … ;
String d = … ;
Double c = … ;
// Instantiate business objects
Cliente cliente = new Cliente( n , d , c ) ;
clientes.add( cliente ) ;
}