当前位置: 首页 > 知识库问答 >
问题:

Java将元素拆分并添加到相应的数据类型数组列表中

沈栋
2023-03-14

我的问题是当用户输入文本时,使用 .split() 时应该有两个要拆分的元素,但是对于它拆分的项目,我如何将它们放入不同的列表中,以便我可以使用基于整数的列表进行计算。

e、 g.用户输入“skyrim,100”,“skyrism”条目是一个字符串,但带有数字(整数)“100”。

游戏名称(字符串)、小时(整数)

  1. 天际 , 100
  2. 遗忘 , 25
  3. 侠盗猎车手 V , 50

因此,上面列出的项目是用户输入,其中2个参数由逗号分隔,将被拆分,然后我需要将它们添加到不同的数组列表中。

Scanner input = new Scanner(System.in);

Arraylist<String> game = new Arraylist<>();
Arraylist<Integer> hours = new Arraylist<>();
Arraylist<Object> allGameData = new Arraylist<>();

String gameEntry = input.nextLine().split(" , ");

allGameData.add(gameEntry);

foreach(object items : allGameData) { 
System.out.println(items);
}

所以从这里我应该有:

天际,100,遗忘,25,GTAV,50

如何将游戏名称放入游戏列表,并将数字放入小时列表?

共有3个答案

章承
2023-03-14

如果你重新思考你的方法,你可能会发现它更容易。与其有3个单独的列表,为什么不将其全部存储在一个Map中

您的代码如下所示:

    Scanner scan = new Scanner(System.in);

    Map<String, Integer> gameHoursMap = new HashMap<>();

    String currentValue = scan.nextLine();

    // Loop until you meet some criteria to end such as typing q or quit
    while(!currentValue.equalsIgnoreCase("q")){

        // You would need to handle when the value of currentValue doesn't fit what you would normally be expecting before doing the rest
        String[] vals = currentValue.split(",");

        // Call trim method on the String incase there is any lingering whitespace
        gameHoursMap.put(vals[0].trim(), Integer.valueOf(vals[1].trim()));

        currentValue = scan.nextLine();
    }

当输入不符合您的预期,但您了解要点时,您显然需要编写一些错误处理。

更新:

如果你想为每个游戏存储更复杂的信息,你可以用自定义类< code>GameInfo包装它,然后有一个< code >地图

public class GameInfo {

   private String name;
   private int hoursPlayed;
   private int level;

   // etc
}

然后,您将修改 while 循环以创建 GameInfo 对象,而不仅仅是将字符串int 放入地图

// Create the GameInfo object from the corresponding input supplied by the user
GameInfo game = new GameInfo(vals[0].trim(), Integer.valueOf(vals[1].trim()), Integer.valueOf(vals[2].trim()));

// Put it in the map with the name as the key
gameMap.put(game.getName(), game);
刘永望
2023-03-14

您可以使用Integer.parseInt()。你提交的代码看起来像是伪代码,但这与你想要的类似:

String gameEntry = input.nextLine();
allGameData.add(gameEntry);
String[] splitGameEntry = input.nextLine().split(" , ");
game.add(splitGameEntry[0]);
hours.add(Integer.parseInt(splitGameEntry[1]));

我不知道你想用这段代码完成什么,但你可能想把游戏/小时组织到一个包含这两个值的类中。然后,您的代码将如下所示:

public class GameInfo
{
    private String name;
    private int hours;

    public GameInfo(String name, int hours)
    {
        this.name = name;
        this.hours = hours;
    }

    [getters/setters]

    @Override
    public String toString()
    {
        return name + ":  " + hours + " hours played!";
    }
}

public class Main
{

    public void doSomething()
    {
        Scanner input = new Scanner(System.in);

        List<GameInfo> gameInfo = new ArrayList<>();

        String[] gameEntry = input.nextLint().split(" , ");

        gameInfo.add(new GameInfo(gameEntry[0], Integer.parseInt(gameEntry[1]));

        for(GameInfo gameInfoPiece : gameInfo)
        {
            System.out.println(gameInfoPiece);
        }
    }
}

使用此方法,您将能够根据需要向 GameInfo 类添加尽可能多的信息。例如,如果您想将小时数更改为预期小时到完成并添加实际小时到完成,则可以轻松做到这一点。

萧自珍
2023-03-14

首先,您应该使用的类是ArrayList,大写为L。所以您需要更改:

Arraylist<String> game = new Arraylist<>();
Arraylist<Integer> hours = new Arraylist<>();
Arraylist<Object> allGameData = new Arraylist<>();

对此:

ArrayList<String> game = new ArrayList<>();
ArrayList<Integer> hours = new ArrayList<>();
ArrayList<Object> allGameData = new ArrayList<>();

正确初始化它们后,我们使用 #.add 添加到 ArrayList 中,因此在您的情况下,您将添加到游戏小时列表中,例如:

game.add("some game");
hours.add(10);

当您使用< code>input.nextLine()拆分输入时。拆分(“,”);我们希望返回一个字符串数组。目前你正试图将它设置为一个字符串而不是一个字符串数组。

while (true){
    System.out.println("Enter \"game , hours\" or \"Quit\"");
    String line = input.nextLine();
    if (line.equals("Quit")) break;
    allGameData.add(line);
    String[] parsedData = line.split(" , ");
    game.add(parsedData[0]);
    hours.add(Integer.parseInt(parsedData[1]));
}
 类似资料:
  • 在有趣的功能中,当我将列表添加到其他列表时,它正在添加空列表,我可以找到原因有人可以帮助我这个程序是关于查找给定数组的不同组合

  • 与我之前的帖子相似,我试图开发一个纸牌游戏: a)打印出整副牌 接下来,私有静态int numPairs(ArrayList cards)是一个计算卡片中卡片对数量的方法。如果两张牌等级相同,则两张牌成对。牌中三张相同等级的牌计为1对。如果相同等级的四张牌都在牌中,则有2对牌。这里的问题是,我不确定如何用我编写的代码将3张等级相同的牌计数为1对,并且仍然会出现表示字段card.rank不可见的错误

  • 问题内容: 想要向现有数组添加或追加元素 现在我想用我发送的新值动态更新系列。 就像我发送3个更新系列 再次,如果我发送4更新系列作为 再次,如果我发送1个更新系列,依此类推 怎么做???? 我在其他函数中每5分钟生成一个整数,并希望发送以更新数组。 问题答案: 数组的长度在Java中是不可变的。这意味着一旦创建数组便无法更改其大小。如果使用2个元素初始化它,则其长度为2。但是,您可以使用其他集合

  • 我有一个帐户类,用于我正在构建的求职应用程序,其中包含教育实例的链接列表(只是大学名称,gpa等)。我想要一个HTTP Post请求来向列表中添加一个元素: 这是account类: 然而,当我实际发送带有教育数据的post请求时(针对一个已经存在的用户),它并不发布。它确实正确地打印了帐户a(添加了教育),但实际上并不更新数据库。 此外,这是我拥有的另一个类: 编辑:这是教育课:

  • 问题内容: 我有大量的这种格式的元组列表。每个元组的第二个字段是类别字段。 将其分解为相同类别(A,B,C等)的子列表的最有效方法是什么? 问题答案: 使用itertools.groupby: 产量 或者,要创建一个将每个组作为子列表的列表,可以使用列表理解: to的第二个参数是一个适用于(第一个参数)中每个项目的函数。预期会传回。然后将相同的所有连续项目组合在一起。 operator.itemg

  • 我想在Sokoban游戏中保存我的玩家角色的步骤。首先我想用字符的实际位置填充一个int x和y的数组,称为“pos”。然后我想将这个数组添加到数组的ArrayList中,称为“moves”。 一个玩家位置的阵列: ArrayList为所有步骤,玩家在关卡: 如果将“int[]”放在ArrayList的尖括号内,则会出错。 如何将阵列位置添加到ArrayList移动?