如何解决字符串矩阵索引问题



我正在尝试以 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以避免这种情况。

最新更新