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

时间:2019-06-04 14:34:50

标签: java arrays

我试图以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();
            }
        }
    }
}

3 个答案:

答案 0 :(得分:2)

您读取了4个值,但是当您按int addr=scan.nextInt();的Enter键时,其中的一个空行

一种快速的解决方法是读取空行

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 Skip newline character while reading from Scanner class

答案 1 :(得分:0)

除了其他答案外,您的代码应如下所示:

    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();
        }
    }

并尝试遵循以下约定:

答案 2 :(得分:0)

如果您想了解原因,请在此处说明nextLine的行为:Java Scanner doesn't wait for user input

您也可以将nextLine替换为next来避免这种情况。