Java 对象的一个实例正在接管每个实例
我正在尝试创建一个乐透,你必须读入一个数据文件,并将读入的号码与通过控制台给出的中奖号码进行匹配,我的问题是,在for循环中,我读入了球员号码,它读入得很好,我甚至做了一个测试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
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;
}
}