添加到数组列表而不是求和

时间:2014-03-28 03:49:42

标签: java arrays

需要一些帮助才能添加到我创建的名为FTGames的第一个数组中。当我运行它时,它显示括号中的数字。例如。我从1开始它显示游戏[1]。对于游戏2,它显示Game [1,1],依此类推。我似乎无法弄清楚#1如何摆脱显示器上的[]或打印输出。 #2如何让它添加增加而不是将其列为单独的int。我已经标出了有问题的区域。我确定这是一个我忽略的简单修复。

import java.util.*;

public class Final {
public static void main(String[] args) {
        // create # of games played array
    List<Integer> FTGames = new ArrayList<Integer>();
    FTGames.add(1);
        // create # of shots made array
    List<Integer> ShotsMade = new ArrayList<Integer>();
    System.out.print("Enter Player's Free Throw Percentage: ");
        // Create scanner for user percentage input
    Scanner input = new Scanner(System.in);
    int percent = input.nextInt();
                                // FTGames shows []      in this run
    System.out.println("Game" + FTGames + ":");
    Random r = new Random();
    FTGames.add(1); // Adds 1 to FTGames
    for (int i = 0; i < 10; ++i){
        boolean in = tryFreeThrow(percent);
        if (in) {
        ShotsMade.add(1);
        System.out.print("In" + " ");
        }
        else {
        ShotsMade.add(0);
        System.out.print("Out" + " ");
        }
    }
                        // FTGames shows [1] in this run
    System.out.println("");
    System.out.println("Game" + FTGames + ":");
    FTGames.add(1); //Adds 1 to FTGames to make this Game 2 ** But is not showing that **
    for (int i = 0; i < 10; ++i){
        boolean in = tryFreeThrow(percent);
        if (in) {
        ShotsMade.add(1);
        System.out.print("In" + " ");
        }
        else {
        ShotsMade.add(0);
        System.out.print("Out" + " ");
        }
    }
                        // FTGames shows [1,1}
    System.out.println("");
    System.out.println("Game" + FTGames + ":");
    FTGames.add(1);
    for (int i = 0; i < 10; ++i){
        boolean in = tryFreeThrow(percent);
        if (in) {
        ShotsMade.add(1);
        System.out.print("In" + " ");
        }
        else {
        ShotsMade.add(0);
        System.out.print("Out" + " ");
        }
    }


}




public static boolean tryFreeThrow(int percent) {
    Random r = new Random();
    int number = r.nextInt(100);
    if (number > percent){ 
     return false;
    }
    return true;
}

}    

2 个答案:

答案 0 :(得分:0)

另一方面,在java中用大写字母命名变量并不是真的(例如FTGames和ShotsMade,通常的约定是lowerCamelCase,类型应该是UpperCamelCase)

您的FTGames变量是一个列表。当您对列表进行处理时,它会以[]和逗号分隔的方式显示列表内容,因此当您看到

[1,1]

这是您的列表FTGames,其中包含2个元素。当您调用FTGames.add(1)时,这意味着将另一个整数添加到列表中,其值为1

据推测,您不想添加价值为1的新游戏,而是想再运行游戏的另一次迭代?

所以你做错了是期望.add()执行某种整数加法,当它实际上它添加另一个元素到列表时。考虑一下这个特定问题所使用的正确类型

  • 每场比赛的投篮次数
  • 运行游戏数量的结果

我不打算为你做功课,但是像你现在使用的2个名单是不正确的。

答案 1 :(得分:0)

我不认为你理解.add()的作用。

调用.add()会向列表中添加元素。因此,如果您有一个名为myList的列表,并且您致电myList.add(1),则该列表将变为[1]。然后当你myList.add(2)执行它时,它不进行算术运算,它会将新元素添加到列表的末尾,列表变为[1, 2]

如果我理解你的问题你想要做的事情是这样的:做myList.add(1)应该给你列表为[1]但是添加1应该改变那个元素,就像做算术一样在它上面,结果是[2]。在这种情况下,你会做的是这样的事情:

myList.set(0, 1+1); // just an example to clarify, you want to avoid having random numbers and arithmetic without any explanation

此示例中的set()方法采用0,它是元素的索引,第二个参数是Integer,在这种情况下是1+1,导致2。当你打印出来时,你会得到`[2]。

要摆脱[],而不是做

System.out.println(myList);

做的:

System.out.println(myList.get(0));

这将只为您提供列表的第一个元素。看到你只是改变了列表的第一个元素,这应该足够了(格式化和你认为合适的未添加的内容)。

最后,我会强烈建议您查看文档,因为如果没有文档,您将无法学到所有这些。

http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html

<强>更新

如果您实际实现了我建议的代码,那么main()方法会是什么样子:

public static void main(String[] args) {

    // create # of games played array
    List<Integer> FTGames = new ArrayList<Integer>();
    FTGames.add(1);
    // create # of shots made array
    List<Integer> ShotsMade = new ArrayList<Integer>();
    System.out.print("Enter Player's Free Throw Percentage: ");
    // Create scanner for user percentage input
    Scanner input = new Scanner(System.in);
    int percent = input.nextInt();
    // FTGames shows []      in this run
    System.out.println("Game " + FTGames.get(0) + ":");
    Random r = new Random();
    FTGames.set(0, FTGames.get(0)+1); // Adds 1 to FTGames
    for (int i = 0; i < 10; ++i){
        boolean in = tryFreeThrow(percent);
        if (in) {
            ShotsMade.add(1);
            System.out.print("In" + " ");
        }
        else {
            ShotsMade.add(0);
            System.out.print("Out" + " ");
        }
    }
    // FTGames shows [1] in this run
    System.out.println("");
    System.out.println("Game " + FTGames.get(0) + ":");
    FTGames.set(0, FTGames.get(0)+1); //Adds 1 to FTGames to make this Game 2 ** But is not showing that **
    for (int i = 0; i < 10; ++i){
        boolean in = tryFreeThrow(percent);
        if (in) {
            ShotsMade.add(1);
            System.out.print("In" + " ");
        }
        else {
            ShotsMade.add(0);
            System.out.print("Out" + " ");
        }
    }
    // FTGames shows [1,1}
    System.out.println("");
    System.out.println("Game " + FTGames.get(0) + ":");
    FTGames.set(0, FTGames.get(0)+1);
    for (int i = 0; i < 10; ++i){
        boolean in = tryFreeThrow(percent);
        if (in) {
            ShotsMade.add(1);
            System.out.print("In" + " ");
        }
        else {
            ShotsMade.add(0);
            System.out.print("Out" + " ");
        }
    }
}

我再次建议阅读文档并实际了解代码的作用。为此,如果您对我在代码中更改的任何内容感到困惑,请在此问我。我很乐意向你解释。

更新2

我已经解释了所有这些,所以你会理解你在add()做错了什么,以及如果你需要,你可以如何对列表中的元素执行算术运算(或更改值)。但是,为了这个目的,我建议一个简单的计数器。简单的事情:

int myGameCounter = 1;

以后,只要你想通过添加1来代表更多游戏,你就可以:

myGameCounter++;