从存储在数组中的行打印选定的数字

时间:2015-01-19 22:47:50

标签: java arrays

我必须写一些需要输入的内容,例如

4 
2 11 1
3 2 1 1
4 4 5 6 2
5 1 1 1 1 2

第一个数字表示跟随的行数,每行的第一个数字表示跟随整数的数量,每行的最后一个数字表示将打印的内容(索引从1开始)。中间的数字是存储在数组中的数字:

11
2
5
1

这是我到目前为止所提出的,这显然是错误的。

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int lines = sc.nextInt();
    int size = sc.nextInt();
    int[] a = new int[size - 1];

    while (lines <= 0) {
        lines = sc.nextInt();
    }
    for (int i = 0; i <= lines; i++) {
        a[i] = sc.nextInt();
    }
    sc.close();
}

我不想要答案;我想要一些指导,因为我输了。

3 个答案:

答案 0 :(得分:2)

似乎最终的目标是创建一个int[][],但值得注意的是它可能是一个锯齿状的矩阵(不同的行可能有不同的长度)。

如果你记住这一点,那么如何处理每一项输入就会变得更加简单。

从那里你想要根据每一行的最后一个元素打印每个数组的(i - 1)th元素。一旦你有了矩阵,这很简单。如果有点奇怪。

public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);


    int lines = sc.nextInt();
    int[][] input = new Integer[lines][]; //This is the matrix we are building

    for(int i = 0; i < lines; i++){       //For each row of numbers
        int size = sc.nextInt();          //Find out how many numbers on this row
        input[i] = new int[size];         //Create array of this size for this row
        for(int x = 0; x < size; x++){    //For each number on this row
            input[i][x] = sc.nextInt();   //Read it into the correct row,col positon
        }
    }

    sc.close();

    //Do printing
    for(int[] row : input){
        int lastElm = row[row.length - 1];
        System.out.println(row[lastElm - 1]);
    }
}

答案 1 :(得分:0)

我尝试以下方法:

  1. 将文档拆分为行,将其保存为字符串

  2. 忽略第1行,也许你可以用它来交叉检查总线数?

  3. 在行上使用.split(&#34; \ s +&#34;),然后将结果转换为整数

  4. 从每一行中取出最后一个数字(让我们调用数字i),然后获取数组的第i个元素

  5. 这有什么意义吗?我有一个问题是,输入文件是否有换行符,还是连续的数字流?

答案 2 :(得分:0)

您可以执行以下操作:

  • 首先,阅读第一行:

    int numberOfLines = Integer.parseInt(sc.nextLine());
    
  • 然后使用给定的整数创建一个for循环,以循环遍历以下行:

    for (int i = 0; i < numberOfLines; i++) { ... }
    
  • 然后,在for循环中,取每一行:

    String line = sc.nextLine();
    
  • 然后,将行拆分为多个部分,空格为分隔符:

    String[] parts = line.split(" ");
    

    必须打印parts数组的最后一个索引。

    int index = parts[parts.length - 1];
    int numberToPrint = parts[index];
    System.out.println(numberToPrint);
    

如您所见,您不需要第一个元素来检查给定数字序列的长度。如果用空格分割线条,则可以使用数组属性length调用最后一个元素。

PS:如果用户输入格式错误,可能会抛出ArrayIndexOutOfBoundsException。你可以抓住它并指责用户是愚蠢的。