gpt4 book ai didi

java - 计算整数数组中位于不同位置的公共(public)元素的数量

转载 作者:太空宇宙 更新时间:2023-11-04 09:48:31 24 4
gpt4 key购买 nike

对于我的作业,我需要编写一个方法来返回在 2 个数组之间找到的奶牛数量(请参见下面的定义)。如果输入数组具有不同数量的元素,则该方法应抛出 IllegalArgumentException 并带有适当的消息。

bull 是在同一位置找到的 int 数组中的常见数字,而cow 是在不同位置找到的 int 数组中的常见数字。请注意,如果一个数字已经是公牛,则不能将其视为牛。

例如,考虑以下数组:

int[] secret = {2, 0, 6, 9};
int[] guessOne = {9, 5, 6, 2};
int[] guessTwo = {2, 0, 6, 2};
int[] guessThree = {1, 2, 3, 4, 5, 6};
int[] guessFour = {1, 3, 4, 4, 0, 5};

1) getNumOfCows(secret, guessOne) returns 2
2) getNumOfCows(secret, guessTwo) returns 0
3) getNumOfCows(secret, guessThree) returns an exception
4) getNumOfCows(guessThree, guessFour) returns 2

下面看到的我的方法对于示例 1 和 3 来说效果很好,但是示例 2 和 4 存在一个问题,即 getNumOfCows(secret,guessTwo) 返回 1 而不是 0,因为 Secret[0] 和guessTwo[3] 处的元素被视为一头牛。有人可以帮我修复我的代码吗?

// A method that gets the number of cows in a guess --- TO BE FIXED

public static int getNumOfCows(int[] secretNumber, int[] guessedNumber) {

// Initialize and declare a variable that acts as a counter

int numberOfCows = 0;

// Initialize and declare an array

int[] verified = new int[secretNumber.length];

if (guessedNumber.length == secretNumber.length) {

// Loop through all the elements of both arrays to see if there is any matching digit

for (int i = 0; i < guessedNumber.length; i++) {

// Check if the digits represent a bull

if (guessedNumber[i] == secretNumber[i]) {

verified[i] = 1;
}
}

for (int i = 0; i < guessedNumber.length; i++) {

// Continue to the next iteration if the digits represent a bull

if (verified[i] == 1) {

continue;
}

else {

for (int j = 0; j < secretNumber.length; j++) {

if (guessedNumber[i] == secretNumber[j] && i != j) {

// Update the variable

numberOfCows++;

verified[i] = 1;

}
}
}
}
}

else {

// Throw an IllegalArgumentException

throw new IllegalArgumentException ("Both array must contain the same number of elements");
}

return numberOfCows;
}

最佳答案

首先使用单独的数组遍历并标记所有公牛,以确保公牛的位置也被算作母牛

public static int getNumOfCows(int[] secretNumber, int[] guessedNumber) {
int max = secretNumber.length;
int cows = 0;
int[] checked = new int[max];
for (int i = 0; i < max; i++) {
if (secretNumber[i] == guessedNumber[i]) {
checked[i] = 1;
}
}

for (int i = 0; i < max; i++) {
if (checked[i] == 1) {
continue;
}
for (int j = 0; j < max; j++) {
if (secretNumber[i] == guessedNumber[j]) {
cows++;
checked[i] = 1;
}
}
}
return cows;
}
<小时/>

现在这个答案已被接受 original question可以投票作为重复项关闭

我在这里发布了一个重复问题的答案,如果这个问题获得批准,那么另一个问题可以作为重复问题关闭。

关于java - 计算整数数组中位于不同位置的公共(public)元素的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55121991/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com