要添加到 ArrayList 的问题扫描变量

problem scan variable to add to arraylist

提问人:Nicolas Ramos 提问时间:3/28/2023 最后编辑:MC EmperorNicolas Ramos 更新时间:3/28/2023 访问量:54

问:

早上好,我正在学习 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

}
java 列表 arraylist java.util.scanner

评论

1赞 John Williams 3/28/2023
“i \< n”是故意的还是错别字:“i < n”?
1赞 9DA 3/28/2023
您能否就您正在使用的输入文件提供更多说明?似乎您要做的第一件事是在进入 for 循环之前使用 sc.nextInt() 读取整数值。你能不能格式化你的帖子,以便你所有的代码实际上都在代码块中?我会让它更容易准备。
0赞 Nicolas Ramos 3/28/2023
好的,现在以更好的方式制定它
0赞 Nicolas Ramos 3/28/2023
在一家致力于销售电器用品的企业中,它以以下结构拥有客户的信息。int cliCode;客户代码 char NameName[40];姓氏和名字Char Dire[60];家庭住址 float monCred;您每次购买可以获得的最大信用额度。请求: • 输入数据 N 个客户。• 当客户被输入时,使用功能显示注册数据。• 在 N 个客户的加载结束时,显示有多少客户的信用额度大于 30,000 美元。
0赞 Nicolas Ramos 3/28/2023
这是我应该做的

答:

0赞 Ruslan Macari 3/28/2023 #1

请尝试以下代码:

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;
}
}

评论

0赞 ray 3/28/2023
请在您的答案中添加更多详细信息/解释。
0赞 Basil Bourque 3/28/2023 #2

更改为 因为您希望它是一个递增的数字而不是文本。String nombreint nombre

如果类的主要用途是透明且不可变地通信数据,请将类定义为记录Cliente

public record Cliente( int nombre , String direccion , double credito ) { }

提示: 记录可以在方法中本地定义,也可以嵌套在另一个类中,也可以嵌套在它自己的独立文件中。.java

使用扫描程序在实例化客户端之前收集所有需要的数据。通常,最好将用户界面与其他代码分开。

使用 scanner 命令(如 和 )时,请确保通过调用 来使用剩余的行尾。请参阅有关此问题的答案。nextIntnextDoublenextLine

record Cliente( int nombre , String direccion , double credito ) { }
Scanner scanner = new Scanner( System.in );

System.out.println( "How many?" );
int count = scanner.nextInt();
scanner.nextLine(); // Consume the end-of-line left over from the `nextInt` call.
List < Cliente > clientes = new ArrayList <>( count );  // When convenient and sensible, specify the initial capacity of a new `ArrayList`.

for ( int nth = 1 ; nth <= count ; nth++ )
{
    // Gather inputs from user-interface.
    System.out.println( "direccion: " );
    String d = scanner.nextLine();

    System.out.println( "credito: " );
    double c = scanner.nextDouble();
    scanner.nextLine(); // Consume the end-of-line left over from the `nextDouble` call.

    // Instantiate business object.
    Cliente cliente = new Cliente( nth , d , c );
    clientes.add( cliente );
}
System.out.println( clientes );
How many?
3
direccion: 
one
credito: 
1.1
direccion: 
two
credito: 
2.2
direccion: 
three
credito: 
3.3
[Cliente[nombre=1, direccion=one, credito=1.1], Cliente[nombre=2, direccion=two, credito=2.2], Cliente[nombre=3, direccion=three, credito=3.3]]

评论

0赞 Nicolas Ramos 3/28/2023
感谢您的帮助,我看到了您的代码并将其与我的代码进行了比较,我对扫描仪的工作原理知之甚少,您对它的评论让我知道我犯了什么错误......来自阿根廷的问候 <3