我正在尝试以 2d 数组的形式存储人员的姓名和地址,但是当我运行代码时,它只接受较少的值。例如,如果我给数组 2 行和 2 列,它只接受 3 个值。
我尝试在其他论坛上搜索,无法获得正确的答案。我还更改了维度值,但它只给出了错误的结果。
import java.util.*;
class findme{
public static void main(String args[]){
Scanner scan=new Scanner(System.in);
System.out.print("enter the number of person: ");
int per=scan.nextInt();
System.out.print("enter the number of address: ");
int addr=scan.nextInt();
String addrs[][]=new String[per][addr];
for(int i=0;i<per;i++){
for(int j=0;j<addr;j++){
addrs[i][j]=scan.nextLine();
}
}
}
}
您读取了 4 个值,但其中一个是空行,当您按 Enter 进行int addr=scan.nextInt();
快速解决方法是读取该空行
import java.util.*;
class findme{
public static void main(String args[]){
Scanner scan=new Scanner(System.in);
System.out.print("enter the number of person: ");
int per=scan.nextInt();
System.out.print("enter the number of address: ");
int addr=scan.nextInt();
---> scan.nextLine();
String addrs[][]=new String[per][addr];
for(int i=0;i<per;i++){
for(int j=0;j<addr;j++){
addrs[i][j]=scan.nextLine();
}
}
}
}
编辑:
或者,您可以在从扫描仪类读取时scanner.skip
跳过换行符
除了其他答案之外,这里的代码应该是什么样子:
Scanner scanner = new Scanner(System.in);
System.out.print("Enter the number of people: ");
int iPeople = scanner.nextInt();
System.out.print("Enter the number of address: ");
int iAdresses =scanner.nextInt();
scanner.nextLine();
String data[][] = new String[iPeople][iAdresses];
for(int i=0; i < iPeople; i++)
{
for(int j=0; j < iAdresses; j++)
{
System.out.printf("Enter %d address for person %d:%n", j + 1, i + 1);
data[i][j] = scanner.nextLine();
}
}
并尝试遵循以下约定:
- 使用正确的 Java 命名约定
- 通过在你认为太杂乱或属于不同组的行之间提供适当的空行,使代码更具可读性,具体取决于他们试图完成的操作。
如果你想了解原因,nextLine
的行为在这里解释: Java Scanner 不会等待用户输入
您也可以将nextLine
替换为next
以避免这种情况。