我无法使用此代码。在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;
}
}
答案 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.in
是InputStream
,它会抛出IOException
...所以你必须先抓住IOException
alert(..)
}}
答案 4 :(得分:0)
你应该添加这一行:
salir = scan.next().charAt(0);
这一行之后:
System.out.print(" desea ingresar mas datos (Y/N)");