问题是我想输入一个可以包含空格的字符串(例如:美国),因此我使用 nextLine,但也以同样的方法输入数据类型 Int。问题是在 for in第二笔收入被 nextLine 的问题搞砸了。
输入国家名称:美国输入居民人数:300
然后会发生这种情况:
输入国家名称: 输入居民人数:
我把代码留给你,我想到了一个可能的解决方案(分开做负载,但分开问两件事肯定不是很好)。PS:假设向量是N个数量而不是5个。
import java.util.Scanner;
public class Problema {
private Scanner teclado;
private String[] paises;
private int[] habitantes;
public void cargar() {
teclado = new Scanner(System.in);
paises = new String[5];
habitantes = new int[5];
System.out.println("Carga de paises y cant de habitantes!");
for(int f = 0; f < paises.length; f++) {
System.out.print("Ingrese nombre de país: ");
paises[f] = teclado.nextLine();
//teclado.nextLine();
//paises[f] = teclado.nextLine();
System.out.print("Ingrese la cantidad de habitantes: ");
habitantes[f] = teclado.nextInt();
}
}
public void ordenarAlfabeticamente() {
for(int k = 0; k < paises.length-1; k++) {
for(int f = 0; f < paises.length-1-k; f++) {
if(paises[f].compareTo(paises[f+1]) > 0) {
String auxpaises;
auxpaises = paises[f];
paises[f] = paises[f+1];
paises[f+1] = auxpaises;
int auxhabitantes;
auxhabitantes = habitantes[f];
habitantes[f] = habitantes[f+1];
habitantes[f+1] = auxhabitantes;
}
}
}
}
public void ordenarHabitantes() {
for(int k = 0; k < habitantes.length-1; k++) {
for(int f = 0; f < habitantes.length-1-k; f++) {
if(habitantes[f] < habitantes[f+1]) {
int auxhabitantes2;
auxhabitantes2 = habitantes[f];
habitantes[f] = habitantes[f+1];
habitantes[f+1] = auxhabitantes2;
String auxpaises2;
auxpaises2 = paises[f];
paises[f] = paises[f+1];
paises[f+1] = auxpaises2;
}
}
}
}
public void imprimirA() {
System.out.println("Nombres de paises en orden alfabeto y sus habitantes: ");
for(int f = 0; f < paises.length; f++) {
System.out.println(paises[f] + " - " + habitantes[f]);
}
}
public void imprimirB() {
System.out.println("Nombres de paises y habitantes ordenado de mayor a menor: ");
for(int f = 0; f < habitantes.length; f++) {
System.out.println(paises[f] + " - " + habitantes[f]);
}
}
public static void main(String[] ar) {
Problema prob = new Problema();
prob.cargar();
prob.ordenarAlfabeticamente();
prob.imprimirA();
prob.ordenarHabitantes();
prob.imprimirB();
}
}
问题是:
它不缓冲
teclado
换行符,因此调用:查找换行符作为第一个字符并将其作为空行
有两种方法可以修复它:
teclado.nextLine()
使用after使用换行符teclado.nextInt();
读取数字
String
,然后将其解析为Integer
应该注意的是,在这两种情况下,最好在 a 中包含数字的读取,
try catch
因为如果输入的字符串不代表数字,两者都会失败。失败的是整数的读取,因为您使用相同的扫描仪,您可以做的是使用相同的 nextLine(),并将其转换为整数。
更改此行
对于这条线
好吧,我为你解决了问题。发生的情况是,在居民变量中输入值时,您没有清除缓冲区,并且下一个字段(文本)将其识别为无效字段。然后我把代码和控制台的结果留给你,希望对你有帮助,你只需要整理数据,让它看起来更美观,问候。
控制台结果: