如何按特定顺序打印2D阵列的某些部分?

时间:2015-11-25 12:32:51

标签: java arrays if-statement for-loop printing

我的函数需要使用两个参数,称为数据,播放器。参数数据是包含nba.txt电子表格数据的二维字符串数组。参数播放器是一个字符串。 该函数查找数据中的所有行,其中第0列(在其小写版本中)包含存储在播放器中的字符串作为子字符串(也是小写版本)。对于所有这些行,它会打印相应播放器的统计信息。

我的代码:

 public static void print_player_info(String[][] data, String player)
  {
   String name = player.toLowerCase();
   for(int i = 0; i<data[0].length; i++)
   {
    String namecolumn = data[i][0];
    String rownames = data[0][i];
    for(int j = 0; j<data[0].length; j++)
    {
        String temp = Arrays.toString(data[j]);
        if(temp.toLowerCase().contains(player))
        {
            System.out.println(rownames+": "+data[j][i]);
        }
    }
   }  
  }

如果输入一次只检索一个人,它会以所需的方式工作。

示例:输入:“lebro” 输出:

player: LeBron James
games played: 69
minutes per game: 36.1
etc...

如果我的输入恰好检索了多个人,则将其打印堆叠:输入“jam”

player: James Harden
player: LeBron James
games played: 81
games played: 69
etc...

当我输入“jor”时,它应该找到多个包含“jor”的名称,但它不输出任何内容。我想知道如何解决此问题以及之前的输入:

player: James Harden
games played: 81
etc...
player: LeBron James
games played: 69
etc...

2 个答案:

答案 0 :(得分:0)

如果您的阵列始终以完全相同的方式填充。像这样

[["James Harden", "81", ...],["Lebron James", "69"]]

然后你总是知道array[x][0]是玩家的名字。 如果您的数组内容看起来与此不同,那么您使用的是2D数组错误。

知道您可以检查该玩家是否符合您的要求,然后打印他的统计数据。

public static void print_player_info(String[][] data, String player)
{
    String name = player.toLowerCase();
    for(int i = 0; i<data[0].length; i++)
    {
        String namecolumn = data[i][0];
        String rownames = data[0][i];
        if(data[i][0].contains(player)){
            for(int j = 0; j<data[0].length; j++)
            {
             System.out.println(rownames+": "+data[j][i]);  
            }
        }
    }  
}

如果不确定播放器的名称在什么位置,那么如果你首先遍历数组搜索名称而不是将它们全部放在一起,则可能是最好的。将它粘在一起将使其不可靠,因为可能其他数据也包含播放器字符串。

如果你想让自己更容易,你也可以看看字典。有了这个,你就有了一个带有键和值的对象。拥有这些词典的列表和列表作为价值,您可以轻松搜索您需要的玩家,如果他们的名字是唯一的。

答案 1 :(得分:0)

public static void print_player_info(String[][] data, String player){
    // lower case the search string
    String searchString = player.toLowerCase();
    // check every row in the data table except the first
    // because it has the column names in it.
    for(int row = 1; row < data.length; row++){
        // get the player name in this row
        String playerInThisRow = data[row][0];
        // lower case it and check if it contains the search string
        if(playerInThisRow.toLowerCase().contains(searchString)){
            // go throu every column in this row
            for(int column = 0; column < data[0].length; column++){
                // and get the column name and the content
                String columnContent = data[row][column];
                String columnName = data[0][column];        
                // and print it
                System.out.println(columnName +": " + columnContent);
            }  
        }
    }
 }