【问题标题】:Create an individual integer for each ArrayList element?为每个 ArrayList 元素创建一个单独的整数?
【发布时间】:2013-08-28 13:45:54
【问题描述】:

我正在为某款游戏开发某种“分数跟踪器”应用程序。用户添加一定数量的玩家(目前数量不限),然后将这些玩家名称添加到 ArrayList。然后在下一个活动中,用户必须从 Spinner 中选择一个玩家名称并输入一定数量的“点数”,或者说该玩家的“分数”。

这是我目前的代码:

public void submitScore(View v){
    LinearLayout lLayout = (LinearLayout) findViewById (R.id.linearLayout);
    final int position = playerList.getSelectedItemPosition();
    EditText input = (EditText) findViewById(R.id.editText1);
    final LinearLayout.LayoutParams lparams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    final TextView newTextView = new TextView(this);
    String enteredText = input.getText().toString();
    
    if (enteredText.matches(""))
    {
        emptyTextError();
    }
    else
    {
        //NEW TEXTVIEW
        newTextView.setLayoutParams(lparams);
        newTextView.setText(players.get(position) + " " + score);
        newTextView.setTextSize(20);
        lLayout.addView(newTextView);
    }
}

如您所见,用户输入某个分数并创建一个包含玩家姓名和当前分数的新文本视图。

现在我想做的是实现一个功能来跟踪每个玩家的得分。

示例:用户添加了 2 个玩家,一个叫 John,一个叫 Jack。然后用户给 John 加了 20 分,过了一会儿又给了 20 分,也给了 john。现在 textViews 应该是这样的:

约翰 20

约翰 40

如果用户给 Jack 加 10 分,给 John 加 20 分,TextViews 应该是这样的:

约翰 20

约翰 40

杰克 10

约翰 60

这是我不知道该怎么做。如何为每个 ArrayList 元素实现一个新的 int 变量?或者有没有比制作 int 变量更好的方法?

我需要app根据ArrayList自动生成int,如果ArrayList包含5个玩家,则需要创建5个int,因为我不知道用户会进入多少个玩家。

【问题讨论】:

  • 为什么不使用 Map 作品List
  • @rocketboy 我从来没有做过这样的事情,我还是个初学者。您能否就如何执行此操作添加一些解释?谢谢

标签: java android eclipse arraylist


【解决方案1】:

您应该创建一个类,可能称为“播放器”。每个玩家将有一个字符串值name 和一个int 值score。然后,您可以在每次创建新 Player 时将这些 Player 实例添加到数组中。在Java class toturial中查看操作方法

【讨论】:

  • 谢谢,我会试一试,告诉你进展如何
  • 另外,OP 应该在the Collections tutorial了解Maps 和其他集合
【解决方案2】:
     class PlayerScore{

         String userName;
         int score;
         public PlayerScore(String userName, int score) {
                    this.userName = userName;
                    this.score = score;
         }

       //setter and getter

      }    

       List<PlayerScore> playerScore=new ArrayList<PlayerScore>();
       playerScore.add(new PlayerScore("John",20));
       playerScore.add(new PlayerScore("John",40));
       playerScore.add(new PlayerScore("Jack",10));
       playerScore.add(new PlayerScore("John",60)); 

【讨论】:

  • 这不是马修的意思。他加了 2x20,即 40。你直接加 40。因此,玩家对象中的分数需要有一些审计/历史属性。
【解决方案3】:

尝试使用Map&lt;String,Integer&gt;,为了更快的访问尝试HashMap&lt;~&gt;

    Map<String, Integer> map = new HashMap<String, Integer>();
    map.put("John", 10);
    map.put("Bob", 40);

如果您想按名称排序,请使用 TreeMap。如果您想按分数排序,请阅读这个旧线程: Sort a Map<Key, Value> by values (Java)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-21
    • 2022-06-29
    • 1970-01-01
    • 1970-01-01
    • 2013-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多