我对java很新,并且遇到了这个我正在努力解决的问题。我有两组数字,存储在两个独立的数组中,代表彩票号码。第一组是用户号码,第二组是彩票网页上的号码。我已经尝试比较阵列中位置的数字位置,但我不确定哪些结果让我得到正确的比赛数量以及如何包含与奖金球的匹配,因为有6个用户数字用于抽奖,但平局中有7个彩票号码(6个号码加上奖金号码)。 我在下面提供了我的代码:
// set up an array to store numbers from the latest draw on the lottery web page
Integer [] numbers = new Integer [split.length];
int i = 0;
for (String strNo : split) {
numbers [i] = Integer.valueOf(strNo);
i++;
}
for (Integer no : numbers) {
System.out.println(no);
}
Element bonusElement = firstLottoRow.child(3);
Integer bonusBall = Integer.valueOf(bonusElement.text());
System.out.println("Bonus ball: " + bonusBall);
//Elements elementsHtml = doc.getElementsByTag("main-article-content");
final int SIZE = 7;
//array to store user numbers
int [] userNumbers = new int[SIZE];
boolean found = false;
int pos = 0;
int search = 0;
int searchPos=-1;
boolean bonus = false;
int lottCount;
while (pos<SIZE)
{
System.out.println("enter your numbers");
userNumbers[pos]=keyboard.nextInt();
pos++;
}
for (int count: userNumbers)
{
System.out.println(count);
}
while ((pos < SIZE) && (!found))
{
if (userNumbers[pos] == numbers[0])
{
found = true;
System.out.println("You have matched one number"); //am i wrong in saying //this?
}else pos++; //am i incrementing the wrong counter and at what point do i //implement the lottery counter?
}//while
if (!found)
{
System.out.println("You have not won this time");
}else if (userNumbers[pos] == bonusBall)
{
bonus = true; //i think this is wrong too
}
//how do i go about working out how many nos the player has matched or how many //numbers theyve matched plus the bonus?
答案 0 :(得分:1)
我认为整数数组是您问题的错误数据类型。相反,你应该使用Set
(我假设每个数字在我说的时候都是唯一的)。完成后,您要调用的方法称为containsAll。如果您的号码不唯一,请改用List
。它还有一个containsAll
方法。这段代码应该可以帮助您入门:
package com.sandbox;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
public class Sandbox {
public static void main(String[] args) throws IOException {
Set<Integer> userNumbers = new HashSet<>();
userNumbers.add(1);
userNumbers.add(2);
userNumbers.add(3);
userNumbers.add(4);
userNumbers.add(5);
userNumbers.add(6);
Set<Integer> lotteryNumbers = new HashSet<>();
lotteryNumbers.add(1);
lotteryNumbers.add(2);
lotteryNumbers.add(3);
lotteryNumbers.add(4);
lotteryNumbers.add(5);
lotteryNumbers.add(6);
lotteryNumbers.add(7);
if (lotteryNumbers.containsAll(userNumbers)) {
System.out.println("We have a winner!");
} else {
System.out.println("Sorry, you're a loser");
}
}
}
答案 1 :(得分:0)
迭代您的用户数组。将该数组中的每个值与绘制的彩票号进行比较。每次数字匹配时递增计数器。
然后检查强力球。
然后打印出增量值,以及强力球是否匹配。
答案 2 :(得分:0)
您应该将数组中的所有数据放入Set
(例如HashSet
),然后使用Google Guava Sets.intersection(set1, set2)
查找两组(所有元素的集合相同)。
这将让您确切地知道匹配的数量,以及它们只在少量代码行中的数字。
E.g。
Set<Integer> lottoSet = Sets.newHashSet(Ints.asList(numbers));
Set<Integer> userSet = Sets.newHashSet(Ints.asList(userNumbers));
Set<Integer> matchedElements = Sets.intersection(lottoSet,userSet);
// How many numbers matched
int numMatched = matchedElements.size();
奖金球可以通过额外的简单userSet.contains(bonusBall)
检查来处理。
答案 3 :(得分:0)
首先,您需要一种方法来比较前6个整数。订单无关紧要,因此您需要检查乐透号码是否与机票上的任何号码相匹配。最简单的方法是在for循环中使用for循环。每次检查乐透号码是否与您的六个号码中的任何一个匹配,然后根据您的六个号码检查下一个乐透号码。如果您有匹配项,请递增计数器 int count = 0; //初始化外部for循环 if(myNum [x] == lottoNum [x]){ count = count + 1; }
现在您将知道前六个数字中有多少是匹配。现在创建另一种方法来查看奖金是否匹配。这只是公正的 bool bonusHit; if(myNums [7] == lottoNum [6]){ bonusHit = true;} 其他{ bonusHit = false;}