Java 对象的一个实例正在接管每个实例

Java 对象的一个实例正在接管每个实例,java,object,instances,Java,Object,Instances,我正在尝试创建一个乐透,你必须读入一个数据文件,并将读入的号码与通过控制台给出的中奖号码进行匹配,我的问题是,在for循环中,我读入了球员号码,它读入得很好,我甚至做了一个测试 system.out.print(ticketList.get(i).getNumbers()[j]+" "); 这检查了数字是否正确,它们是正确的,但当我在for循环之外执行相同的代码行时,我将一个票证的实例添加到arraylist中 ticketList.add(new Ticket(Players[i],t

我正在尝试创建一个乐透,你必须读入一个数据文件,并将读入的号码与通过控制台给出的中奖号码进行匹配,我的问题是,在for循环中,我读入了球员号码,它读入得很好,我甚至做了一个测试

 system.out.print(ticketList.get(i).getNumbers()[j]+" "); 
这检查了数字是否正确,它们是正确的,但当我在for循环之外执行相同的代码行时,我将一个票证的实例添加到arraylist中

 ticketList.add(new Ticket(Players[i],ticketnumbers));`
这一切都被创建的最后一个实例票证所取代,但wierd部分是,被取代的只是球员号码,而不是球员姓名,所以这才是真正让我感到不快的地方,我已经坐在上面一段时间试图找到东西,但到目前为止我还是空着的,任何帮助都将不胜感激

我想说剩下的代码是有效的,因为如果我把中奖号码作为最后一个人的号码,他就会中乐透。我只知道当我尝试匹配号码数组时,它只使用最后一个人的号码,而不是每个人的个人号码,所以这段代码不起作用

public class Lottery{

static ArrayList<Ticket> ticketList = new ArrayList(); 

public static void scanFile() throws FileNotFoundException 
{
    String fileName;
    int[] WinningNumbers = new int[6];
    Scanner scan = new Scanner(System.in);

    System.out.println("enter a string");
    fileName = scan.nextLine();
    System.out.println("Enter the winning Lottery Numbers");
    for(int i =0; i<WinningNumbers.length;i++)
    {
        WinningNumbers[i] = scan.nextInt();
    }
    scan.close();

    int NumberofTickets;
    File file = new File(fileName);
    Scanner scanInput = new Scanner(file);
    NumberofTickets = scanInput.nextInt();
    scanInput.nextLine();

    String[] PlayersName = new String[NumberofTickets];
    int[] ticketnumbers = new int[6];

    for(int i=0; i < NumberofTickets;i++)
    {
        scanInput.nextLine();
        PlayersName[i] = scanInput.nextLine();
        scanInput.nextLine();
        for(int j = 0 ; j<6;j++)
        {
            ticketnumbers[j] = scanInput.nextInt();

        }

        if(i != NumberofTickets-1)
        scanInput.nextLine();

        ticketList.add(new Ticket(PlayersName[i],ticketnumbers));
        for(int j = 0 ; j<6;j++)
        {   
            System.out.print(ticketList.get(i).getNumbers()[j]+" ");
            }
    }
    for(int i=0; i < NumberofTickets;i++)
    {
        for(int j = 0 ; j<6;j++)
        {   
            System.out.print(ticketList.get(i).getNumbers()[j]+" ");
            }
    }
    checkTickets(WinningNumbers,NumberofTickets);
    scanInput.close();
}


public static void checkTickets(int[] winningNumbers, int NumberofTickets)
{

    int[] winnersMatchedNumbers = new int[6];
    for(int i =0; i<NumberofTickets; i++)
    {
        int counter = 0;
            if(winningNumbers[j] == ticketList.get(i).getNumbers()[j])
            {
                counter = counter+1;

            }
        }
        winnersMatchedNumbers[i] = counter;

    }

    Winners(winnersMatchedNumbers,NumberofTickets);
}
public static void Winners(int[] matchedNumbers, int NumberofTickets)
{
    for(int i = 0; i<NumberofTickets;i++)
    {
        System.out.println(ticketList.get(i).getTicketName()+ " matched "+ matchedNumbers[i]+" and won "+ ticketList.get(i).getWinnings(matchedNumbers[i]));
    }
}


public static void main(String[] args) {
    // TODO Auto-generated method stub
    try {
        scanFile();
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


}

看看你的代码,想想看:你创建了多少不同的int[]数组(ticketNumbers)?例如,您调用了多少次
newint[6]
?我猜是一次,因为我使用了一个全局变量?好的,我会切换它,在构造函数中生成一个新的int[6],看看会发生什么,我得等到下班了,谢谢你的提示!构造器很好。就像在循环的每个迭代中创建一个新的票证一样,在循环的每个迭代中都需要创建一个新的int数组,因为每个票证都必须有自己的数字数组,而不是像所有其他票证一样的sam数组;在我的循环之外,这需要为每一张新票重新创建,但是球员的名字没有,因为我把他们都放在一个数组中,我想我现在知道了,好吧,所以它在大多数情况下都有效,在第一张票的数字通过后计数器变量停止计数时遇到了问题,假设我让第一个人的号码和中奖号码完全匹配,他会根据密码赢,但是如果票2有他的3个号码,计数会显示0而不是3
public class Ticket 
{
   private String ticketName;
   private int[] personNumber = new int[6];

public Ticket(String Name,int[] ticketNumbers)
{   
     ticketName = Name;
     personNumber = ticketNumbers;  
}
public String getTicketName()
{
    return ticketName;
}

public int[] getNumbers()
{
    return personNumber;
}
public int getWinnings(int count)
{
    int winningsAmount;
    switch(count)
    {
    case 3:  winningsAmount = 10;
                break;
    case 4:     winningsAmount = 100;
                break;
    case 5:     winningsAmount = 10000;
                break;
    case 6: winningsAmount = 1000000;
                break;
    default: winningsAmount = 0;
                break;
    }
    return winningsAmount;
}
}