使用while循环在ArrayList中输入对象

时间:2015-10-27 08:29:15

标签: java

我无法使用此代码。在ArrayList中输入对象时,程序会询问您是否要继续,但它会跳过该行并继续再次询问名称(nombre)。

 public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    ArrayList<Personas> persona = new ArrayList<Personas>();
    char salir = 'S';
    String nombre;
    int edad;
    while (salir == 'S') {
        System.out.print("\n Nombre: ");
        nombre = scan.next();
        System.out.print(" edad: ");
        edad = scan.nextInt();

        persona.add(new Personas(edad, nombre));
        System.out.print(" desea ingresar mas datos (Y/N)");

    }
    for (Personas datos : persona) {
        System.out.println(datos);
    }
}


public class Personas {
 private String nombre;
 private int edad;


   public Personas (int edad, String nombre)
    {
        this.nombre = nombre;
        this.edad = edad;

    }
   @Override
    public String toString ()
    {
        return "\n nombre: " + nombre + "\n edad:" + edad ;
    }

    public String getFirst ()
    {
        return nombre;
    }
    public int getLast ()
    {
        return edad;
    }
}

5 个答案:

答案 0 :(得分:0)

您永远不会将变量salir更改为'S'以外的任何内容。所以你的循环将无休止地运行。添加一条声明,将salir变量的新值读入循环。

salir = (char) System.in.read();

您还应该将初始值从salir更改为'Y',同时也可以在while检查中进行更改。您预计会输入'Y''N',因此一旦您向用户提供输入内容的选项,检查'S'将始终为假。

答案 1 :(得分:0)

您需要扫描用户输入以更改salir循环中while的值。目前,它是一个连续的while循环,就像while(true)。

答案 2 :(得分:0)

循环:

while (salir == 'S') {
    System.out.print("\n Nombre: ");
    nombre = scan.next();
    System.out.print(" edad: ");
    edad = scan.nextInt();

    persona.add(new Personas(edad, nombre));
    System.out.print(" desea ingresar mas datos (Y/N)");

}

错了。您并未更改变量salir的值,因此除非您更改它,否则它将继续循环。你可以做这样的事情来解决它:

while (salir == 'S') {
    System.out.print("\n Nombre: ");
    nombre = scan.next();
    System.out.print(" edad: ");
    edad = scan.nextInt();

    persona.add(new Personas(edad, nombre));
    System.out.print(" desea ingresar mas datos (S/N)");
    salir = scan.next();
}

答案 3 :(得分:0)

您在代码中缺少一行并且它应该有效,系统需要读取用户输入的char

salir = scan.next().charAt(0);

所以完整的代码是;

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    ArrayList<Personas> persona = new ArrayList<Personas>();
    char salir = 'Y';
    String nombre;
    int edad;
    while (salir == 'Y') {
        System.out.print("\n Nombre: ");
        nombre = scan.next();
        System.out.print(" edad: ");
        edad = scan.nextInt();

        persona.add(new Personas(edad, nombre));
        System.out.print(" desea ingresar mas datos (Y/N)");
        salir = scan.next().charAt(0);

    }
    for (Personas datos : persona) {
        System.out.println(datos);
    }
}


public static class Personas {
 private String nombre;
 private int edad;


   public Personas (int edad, String nombre)
    {
        this.nombre = nombre;
        this.edad = edad;

    }
   @Override
    public String toString ()
    {
        return "\n nombre: " + nombre + "\n edad:" + edad ;
    }

    public String getFirst ()
    {
        return nombre;
    }
    public int getLast ()
    {
        return edad;
    }
}

我刚试过它并且有效。

您可以使用:

System.in.read();

但请注意,它会抛出IOException,因为System.inInputStream,它会抛出IOException ...所以你必须先抓住IOException alert(..) }}

答案 4 :(得分:0)

你应该添加这一行:

        salir = scan.next().charAt(0);

这一行之后:

        System.out.print(" desea ingresar mas datos (Y/N)");