我的函数需要使用两个参数,称为数据,播放器。参数数据是包含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...
答案 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);
}
}
}
}