Java 删除数组中的最大元素

Java 删除数组中的最大元素,java,arrays,Java,Arrays,编写了一些代码,尝试在未排序的数组中查找最大元素,然后将其从数组中删除。我的第一个循环具有查找最大元素的逻辑,而第二个循环应该从第一个循环中获取变量,向前看一个空格,然后插入到最大元素中 我下面的代码似乎适用于我的第二个想法。。但找不到正确的max数组元素 我的数组有以下值{6,3,5,2,7,9,4}。它发现最大数组元素为7。。应该是9点 public void deleteMax() { // set value for comparison starting from the b

编写了一些代码,尝试在未排序的数组中查找最大元素,然后将其从数组中删除。我的第一个循环具有查找最大元素的逻辑,而第二个循环应该从第一个循环中获取变量,向前看一个空格,然后插入到最大元素中

我下面的代码似乎适用于我的第二个想法。。但找不到正确的max数组元素

我的数组有以下值{6,3,5,2,7,9,4}。它发现最大数组元素为7。。应该是9点

   public void deleteMax() {
  // set value for comparison starting from the beginning of the array 
  int arrayMax = arr[0]; 

  for (int i = 0; i < nElems; i++) {
     if (arr[i] > arrayMax) {
        arrayMax = arr[i];

        for (int k = i; k < nElems; k++) {
           arr[k] = arr[k + 1];
           nElems--;

           break;
         }
      }
   }  
}
public void deleteMax(){
//设置从数组开头开始的比较值
int arrayMax=arr[0];
for(int i=0;iarrayMax){
arrayMax=arr[i];
for(int k=i;k
为什么不使用jQuery$.grep和Math.max,比如:

var arr = [6, 3, 5, 2, 7, 9, 4];
var maxNum = Math.max.apply(null, arr);

var newArr = $.grep( arr, function( n ) {
  return n != maxNum;
});
console.log(newArr);

编辑: 嗯,我没有意识到您正在使用Java,正如JavaScript部分所显示的问题

在Java中,可以在数组中找到max number,如

int maxNum = arr.get(0); // get the first number in array
for (int i = 1; i < arr.length; i++) {
    if ( arr.get(i) > maxNum) {
      maxNum = array.get(i);
    }
}
arr.remove(maxNum);
int maxNum=arr.get(0);//获取数组中的第一个数字
对于(int i=1;imaxNum){
maxNum=array.get(i);
}
}
arr.remove(maxNum);

嗯,您不需要任何第二个循环

只有一个循环和两个变量称为f.ex。MaxElementPosition和MaxElementValue,如果此位置上的数字大于上一个MaxElementValue,则每次在循环内都会更新,同时更新值和位置


而在循环中,您确实需要用于比较的值。最后你只需要位置。

你的内部循环是不相关的,你只有一个1D数组,所以做任何内部迭代都没有意义

如果坚持对数组执行no
排序
,则可以执行以下操作:

public void deleteMax() {
   // set value for comparison starting from the beginning of the array 
   int arrayMax = arr[0]; 
   int maxIndex = 0;

   for (int i = 0; i < nElems; i++) {
       if (arr[i] > arrayMax) {
          arrayMax = arr[i];
          maxIndex = i;
       }
   }

   arr.remove(maxIndex);
}
public void deleteMax(){
//设置从数组开头开始的比较值
int arrayMax=arr[0];
int maxIndex=0;
for(int i=0;iarrayMax){
arrayMax=arr[i];
maxIndex=i;
}
}
arr.remove(最大索引);
}

一旦的
循环完成,我们将删除maxIndex处的项

@Alex在正确的轨道上,但是在java中没有可以在数组上调用的remove函数。您所需要的只是他得到的变量maxIndex,这当然是这个最大值的第一次出现,所以如果您需要删除每个最大值的出现,那将是一个不同的问题。因此,一旦您使用@Alex代码:

int arrayMax = arr[0]; 
int maxIndex = 0;

for (int i = 0; i < nElems; i++) {
   if (arr[i] > arrayMax) {
      arrayMax = arr[i];
      maxIndex = i;
   }
}
int-arrayMax=arr[0];
int maxIndex=0;
for(int i=0;iarrayMax){
arrayMax=arr[i];
maxIndex=i;
}
}
如果使用ArrayList而不是数组,这将更容易,在这种情况下,代码如下所示:

int arrayMax = arr.get(0); 
int maxIndex = 0;

for (int i = 0; i < nElems; i++) {
   if (arr[i] > arrayMax) {
      arrayMax = arr[i];
      maxIndex = i;
   }
}
arr.remove(maxIndex);
int-arrayMax=arr.get(0);
int maxIndex=0;
for(int i=0;iarrayMax){
arrayMax=arr[i];
maxIndex=i;
}
}
arr.remove(最大索引);
否则,必须创建临时数组以删除该值:

int[] temp = new int[arr.length-1];
    for(int i = 0, index = 0; index < nElems; i++, index++)
    {
        if(index == maxIndex) index++;
        temp[i] = arr[index];
    }
    arr = temp;
int[]temp=new int[arr.length-1];
for(inti=0,index=0;index
对数组进行排序()
然后获取第一个元素不是更容易吗?类似于
var max=ari.sort(函数(a,b){returna>b;}).pop()数组必须不排序..为什么在做算术时它必须不排序?@Chewy如果它不能排序,可以减少吗
arr.reduce(函数(a,b){返回a>b?a:b;})@Joe过滤器:它的!=,!=无法使用:)确定。。我不能从max开始获取下一个元素,然后用arr[I+1]交换max吗。我该怎么做?你为什么要这么做?这将始终具有最大值及其相应的索引,您可以随时删除它们-不需要任何额外的复杂性