-4

对于这个任务,我无法让最后一个方法再次循环并找到随机数系列中的下一个最大元素。解决这个问题的一些输入会很棒。谢谢你。

公共静态无效主要(字符串[]参数){

    int[] array = randomIntArray (10);   
    sortArray (array);

}

  public static int randomInt (int low, int high){ // Create a serie of random numbers
    int x = 0;
    for (int i = 0; i < 10; i++){
        x = (int)(Math.random ()* (high - low) +low);

    }  
    return x;

}
public static int[] randomIntArray (int n) { // Size of array
    int[] a = new int [n];
    for (int i = 0; i <a.length; i++){
        a[i] = randomInt (-5, 15);
    }
    return a;
}

public static int indexOfMaxInRange (int[] a, int low , int high){

    int index = low;
    for (int i = low +1; i < high; i++){
        if (a[i] > a[index]){ // If the position of i is greater than index
            index = i; // then index will equal that position with the highest element
        }         
    }  
  return index;


}
public static int swapElement (int []a, int index , int i){
    int tmp =0;

  for(i = 0; i < (a.length); i++) {
    tmp = index;
     a[i]= a[tmp] ;
  } 
    return a[tmp] ;
}

public static void sortArray (int[] array){ //The sortArray calls the indexOfMaxInRange to get the index of the largest element, then uses swapElement to swap that index's position to position a[i].

    for (int b= 0; b <array.length; b++){ 
    System.out.println (array[b]+"\t"+ b); // Print out original list of random numbers
    }
    System.out.println ();

    for (int i = 0; i <array.length; i++){    
    int index = indexOfMaxInRange (array, 0, 10 );
    int sort = swapElement (array, index, 0);

    System.out.println (sort+"\t"+ i);      
    }

}
4

2 回答 2

0

对最后 3 种方法所做的更改

public static int indexOfMaxInRange (int[] a, int low , int high){

    int index = low;
    for (int i = low +1; i < a.length; i++){
        if (a[i] > a[index]){ // If the position of i is greater than index
            index = i; // then index will equal that position with the highest element
        }         

    }  
  return index;


}
public static void swapElement (int []a, int index , int i){
    int pos2;        
    pos2 = index;
     a[i]= a[pos2];  

     System.out.println (a[i]+"\t"+ index);     
}

public static void sortArray (int[] array){ 
    for (int b= 0; b <array.length; b++){ 
    System.out.println (array[b]+"\t"+ b);
    } 
    System.out.println ("Number in order");     


    for (int i = 0; i <array.length-1; i++){    
    int index = indexOfMaxInRange (array, i, 10 );
    swapElement (array, index,i );
    }

}
于 2013-04-19T03:31:28.690 回答
0

这看起来像是作业,因为对数组进行排序是由无数可用库处理的,所以我将尝试给出提示而不是完整的答案。

你的 randomInt 函数做的工作比它需要的多 10 倍。这不会改变程序的行为,但这是一种浪费。

您的 swapElement 函数看起来不太对。你不需要返回任何东西,也不需要循环。只需交换位置“index”和“i”中的元素。也许将参数称为“a”和“b”或“pos1”和“pos2”以减少混淆。

在 sortArray 中,找到最大的元素并将其放在位置 0 后,您需要继续查找第二大元素并将其放在位置 1,以此类推。为此,您将需要一个循环。你几乎已经准备好了。提示:在将最大的元素放在位置 0 之后,您可以通过找到最大的剩余元素(即调用 indexOfMaxInRange 但将 1 作为起始位置传递)来找到第二大元素。

于 2013-04-18T18:47:13.903 回答