我无法获得找到最大元素的索引。我知道数组中的元素可以通过X [r]访问,其中r是索引,这就是我在这里所做的,但我似乎无法得到它只得到索引。
代码:
public class Max {
public static void main(String[] args) {
int[] B = {-1, 2, 6, 3, 9, 2, -3, -2, 11, 5, 7};
System.out.println("max = " + maxArrayIndex(B, 0, B.length-1));
}
static int maxArrayIndex(int[] X, int p, int r) {
int q = 0;
if(p < r) {
q = (p + r)/2;
int maxLeft = maxArrayIndex(X, p, q);
int maxRight = maxArrayIndex(X, q+1, r);
int maxFinal = max(maxLeft, maxRight);
return maxFinal;
}
return X[r];
}
static int max(int p , int r) {
int maxIndex = 0;
if(p > r) {
maxIndex = p;
} else {
maxIndex = r;
}
return maxIndex;
}
}
答案 0 :(得分:3)
public class Max {
public static void main(String[] args) {
int[] B = {-1, 2, 6, 3, 9, 2, -3, -2, 11, 5, 7};
System.out.println("max = " + maxArrayIndex(B, 0, B.length - 1));
}
static int maxArrayIndex(int[] X, int p, int r) {
int q = 0;
if (p < r) {
q = (p + r) / 2;
int maxLeft = maxArrayIndex(X, p, q);
int maxRight = maxArrayIndex(X, q + 1, r);
int maxFinal = max(X, maxLeft, maxRight);
return maxFinal;
}
// Changed from X[r] to r. This will return the index instead of the element.
return r;
}
// Added X parameter.
static int max(int[] X, int p, int r) {
int maxIndex = 0;
// Changed to compare the elements of the indexes,
// instead of comparing the indexes themselves.
if (X[p] > X[r]) {
maxIndex = p;
} else {
maxIndex = r;
}
return maxIndex;
}
}
建议的替代方案:
static int maxArrayIndex(int[] X, int p, int r) {
int currentMaxIndex = 0;
for (int i = 0; i < X.length; i++) {
if(X[i] > X[currentMaxIndex]){
currentMaxIndex = i;
}
}
return currentMaxIndex;
}
答案 1 :(得分:2)
修改您的maxArrayIndex
&amp;像这样的max方法,你必须再次在max
块之外调用if
,其余的代码都可以。
代码中存在问题:您必须将数组X
传递给max
方法以获取更大元素的索引,此时您只是找到更大的元素索引。
static int maxArrayIndex(int[] X, int p, int r) {
int q = 0;
if(p < r) {
q = (p + r)/2;
int maxLeft = maxArrayIndex(X, p, q);
int maxRight = maxArrayIndex(X, q+1, r);
return max(X,maxLeft, maxRight);
}
return max(X,p,r);
}
static int max(int X[],int p , int r) {
int maxIndex = 0;
if(X[p] > X[r]) {
maxIndex = p;
}
else {
maxIndex = r;
}
return maxIndex;
}
答案 2 :(得分:0)
似乎你永远不会检查数组中的元素,并在结尾处返回索引的值。
static int max(int[] X , int maxIndex) {
for (int i = 1; i < X.length; i++){
int currentNumber= X[i];
if ((currentNumber> X[maxIndex])){
maxIndex = i;
}
}
return maxIndex;
}
检查这个问题看起来你正在尝试做什么: How can I locate and print the index of a max value in an array?