背景:Java上很新,很少有人理解。如果可能的话,更喜欢“正确方向上的点”,而不是没有解释的复制/粘贴答案。如果我想不再是新手,我需要学习! :)
无论如何,我的目标是尽可能简单地给出2个数组numberList和winnerNumbers,比较它们,并返回numberList与winsNumbers匹配的百分比。两个数组长度始终为10。
我不知道从哪里开始。我一直在谷歌搜索并在这2小时。我的想法是编写一个for循环,将字符串中的每个单独的整数与另一个中的每个整数进行比较,但我不知道该怎么做,或者是否有更简单的方法。我对数组知之甚少,而且我越是谷歌就越困惑。
到目前为止,我唯一拥有的是
public double getPercentThatMatch(int[] winningNumbers) {}
numberList已预设。
答案 0 :(得分:1)
你可以采取的一种方法是:
1)将两个列表转换为集合。
2)从另一个中减去一个。即如果4相同,则得到的集合将具有6个不相同的值
3)10 - (结果集的大小)* 100 =%
答案 1 :(得分:1)
由于您希望指向正确的方向,而不是使用正确的代码,并假设您想使用数组来解决问题,请尝试在您的方法中添加类似的内容:
(loop through arrayA){
(loop through arrayB){
if (current arrayA number is equal to current arrayB number){
then increase match counter by one, since this exists.
also break out of current arrayB loop. (Check next arrayA now.)
}
}
}
When done: return 100*matchCount/totalCount, as a double
因此,对于一个数组中的每个索引,都要检查另一个数组的每个其他索引。每次匹配时增加一个计数器,你就能得到一个匹配率。如果你使用整数作为计数器,请记住使用整数的除法行为很时髦,所以你需要抛出一个双数:
double aDoubleNumber = (double) intNumber / anotherIntNumber
答案 2 :(得分:1)
这是一个可运行的示例,说明如何比较两个int
数组以获得百分比匹配。
public class LotteryTicket {
int[] numberList;
LotteryTicket(int... numbers) {
numberList = numbers;
}
public int getPercentThatMatch(int[] winningNumbers) {
Arrays.sort(numberList);
Arrays.sort(winningNumbers);
int i = 0, n = 0, match = 0;
while (i < numberList.length && n < winningNumbers.length) {
if (numberList[i] < winningNumbers[n]) {
i++;
} else if (numberList[i] > winningNumbers[n]) {
n++;
} else {
match++;
i++;
n++;
}
}
return match * 100 / winningNumbers.length;
}
public static void main(String[] args)
{
int[] winningNumbers = { 12, 10, 4, 3, 2, 5, 6, 7, 9, 1 };
LotteryTicket ticket = new LotteryTicket(5, 2, 6, 7, 8, 4, 3, 1, 9, 0);
int percentMatching = ticket.getPercentThatMatch(winningNumbers);
System.out.println(percentMatching + "%");
}
}
输出:
80%
答案 3 :(得分:0)
如果我们考虑它们,问题会更容易。让你有两套 -
Set<Integer> s1 = //a HashSet of Integer;
Set<Integer> s2 = //a HashSet of Integer;
现在复制s1
例如s11
并执行以下操作 -
s1.retainAll(s2);
现在s1只包含两个集合的元素 - 即交集。
之后,您可以轻松计算百分比
编辑:您可以使用以下代码段轻松地将数组转换为集合(我假设您有int数组) -
Set<Integer> s1 = new HashSet<Integer>(Arrays.asList(somePrimiteiveIntArray));
我认为这个技巧也适用于其他原始类型。
希望这会有所帮助 非常感谢。
答案 4 :(得分:0)
我将尝试击败一匹死马并解释解决这个问题的最简单(概念)方法我将包含一些代码,但需要做很多解释。
你有两个数组,所以我将整个方法改为:
public double getPercentage(int[] arrayA, int[] arrayB) {
double percentage=0;
for(/*go through the first array*/) {
for(/*go through second array*/) {
if(arrayA[i]==arrayB[j]) { /*note the different indices*/
percentage++; /*count how many times you have matching values*/
/* NOTE: This only works if you don't have repeating values in arrayA*/
}
}
}
return (percentage/arrayA.length)*100; /*return the amount of times over the length times 100*/
}
您将使用第一个循环移动第一个数组,使用第二个循环移动第二个数组。因此,您需要遍历arrayB中的每个值,以检查arrayA中的每个值。
答案 5 :(得分:0)
在我的方法中,我尝试将中奖号码存储在Hashset中(一次迭代,O(n))
当迭代numberList时,我会检查Hashset中是否存在数字,如果有,我会增加计数器。 (一次迭代,所以O(n))
因此,通过将计数器除以数组大小来计算百分比。
查看示例代码是否有意义:
import java.util.HashSet;
public class Arraycomparison {
public static void main(String ... args){
int[] arr0 = {1,4,2,7,6,3,5,0,3,9,3,5,7};
int[] arr1 = {5,2,4,1,3,7,8,3,2,6,4,4,1};
HashSet set = new HashSet();
for(int j = 0; j < arr1.length; j++){
set.add(arr1[j]);
}
double counter = 0;
for(int i = 0; i < arr0.length; i++){
if(set.contains(arr0[i])){
counter++;
}
}
System.out.println("Match percentage between arrays : " + counter/arr0.length*100);
}
}
答案 6 :(得分:0)
你应该使用List over array,因为这是一种方便的方法,但是使用数组:
public class Winner {
public static void main(String... args) {
double result = getPercentThatMatch(new int[]{1,2,3,4,5}, new int[]{2,3,4,5,6});
System.out.println("Result="+result+"%");
}
public static double getPercentThatMatch(int[] winningNumbers,
int[] numberList) { // it is confusing to call an array as List
int match = 0;
for (int win : winningNumbers) {
for (int my : numberList ){
if (win == my){
System.out.println(win + " == " + my);
match++;
}
}
}
int max = winningNumbers.length; // assume that same length
System.out.println("max:"+max);
System.out.println("match:"+match);
double devide = match / max; // it won't be good, because the result will be intm so Java will trunc it!
System.out.println("int value:"+devide);
devide = (double) match / max; // you need to cast to float or double
System.out.println("float value:"+devide);
double percent = devide * 100;
return percent;
}
}
希望这会有所帮助。 ;)
答案 7 :(得分:0)
//For unique elements
getpercentage(arr1, arr2){
res = arr1.filter(element=>arr2.includes(element))
return res.lenght/arr2.lenght * 100;
}
//For duplicate elements
getpercentage(arr1, arr2){
const setA = Set(arr1);
const setB = Set(arr2);
Let res = [ ];
for(let i of setB){
if(setA.has(i)){
res.push(i);
}
}
return res.lenght/setA.size* 100;