0

我对java很陌生,并且遇到了我正在努力解决的问题。我有 2 组数字,存储在两个单独的数组中,代表彩票号码。第一组是用户号码,第二组是来自彩票网页的号码。我试图在数组中逐个位置比较数字,但我不确定什么结果让我得到正确的匹配数以及如何将匹配与奖金球包括在内,因为彩票有 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?
4

4 回答 4

1

我认为整数数组对于您的问题来说是错误的数据类型。相反,您应该使用 a Set(当我这么说时,我假设每个数字都是唯一的)。完成此操作后,您要调用的方法称为containsAll。如果您的号码不是唯一的,请使用 aList代替。它也有一个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");
        }
    }


}
于 2013-08-19T20:08:39.690 回答
0

首先,您需要一个方法来比较前 6 个整数。顺序无关紧要,因此您需要检查乐透号码是否与您彩票上的任何号码匹配。最简单的方法是在 for 循环中使用 for 循环。每次检查乐透号码是否与您的六个号码中的任何一个匹配,然后检查下一个乐透号码与您的六个号码。如果你有一个匹配,增加一个计数器 int count = 0; // 在循环外部初始化 if(myNum[x] == lottoNum[x]){ count = count + 1; }

现在您将知道前六个数字中有多少是匹配的。现在创建另一种方法来查看奖金是否匹配。这只是 bool bonusHit; if(myNums[7] == lottoNum[6]){ bonusHit = true;} else{ bonusHit = false;}

于 2013-08-19T20:18:09.987 回答
0

遍历您的用户数组。将该数组中的每个值与抽出的彩票号码进行比较。每次两个数字匹配时增加一个计数器。

然后检查强力球。

然后打印出增量值,以及强力球是否匹配。

于 2013-08-19T20:09:12.027 回答
0

您应该将数组中的所有数据放入 a Set(例如 a HashSet),然后使用Google Guava Sets.intersection(set1, set2)查找两个集合之间的交集(所有元素相同的集合)。

这将使您确切地知道有多少数字匹配,以及它们仅在少数几行代码中是哪些数字。

例如

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)额外的简单检查可以处理奖金球。

于 2013-08-19T20:14:44.967 回答