Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 整数数组迭代?_Java_Arrays_Int_Iteration - Fatal编程技术网

Java 整数数组迭代?

Java 整数数组迭代?,java,arrays,int,iteration,Java,Arrays,Int,Iteration,我的主要目标是从数组中定义的起始位置迭代到数组的末尾,以找到最小值的索引,然后将其与索引零交换,通过迭代将继续将其交换到比上一个索引高的1个索引。我有一个查找数组最小值的方法,还有一个尝试获取最小值索引的方法。以下是我所拥有的: static int min(int[] parameter){ int minValue = 101; for(int z = 0 ; z<parameter.length; z++){ if(parame

我的主要目标是从数组中定义的起始位置迭代到数组的末尾,以找到最小值的索引,然后将其与索引零交换,通过迭代将继续将其交换到比上一个索引高的1个索引。我有一个查找数组最小值的方法,还有一个尝试获取最小值索引的方法。以下是我所拥有的:

   static int min(int[] parameter){
       int minValue = 101;
       for(int z = 0 ; z<parameter.length; z++){
           if(parameter[z] < minValue){
           minValue = parameter[z];
           }
       }
       return minValue;
    }

    static int locateMin (int start, int[] array) {
        int n = 0;
        int value = array[n]; 
        int location = 0;
        for (n= start; n < array.length; n++) {
            if (array[n] < value){ 
                value = array[n];
                location = n;
            }
        }
        return location;

    }
    static void swap(int[] arr, int locationOne, int locationTwo){
        int pos = arr[locationOne];
        arr[locationOne] = arr[locationTwo];
        arr[locationTwo] = pos;
   }

   public static void main(String[] args){
        int[] array = generateArray(10);
        showArray(array);
        swap(array, 0, locateMin(0, array));
        swap(array, 1, locateMin(1, array));
        swap(array, 2, locateMin(2, array));
        showArray(array);
   }
这是硬编码的,如果不小心,可能会产生许多错误。我建议通过迭代来切换。此外,您似乎正在进行选择排序

您的min函数似乎也没有在任何地方使用

编辑:

publicstaticintminvalindex(intstart,T数组[]){
int minIndex=开始;
for(int-cLoc=start;cLoc

这些方法用于查找minIndex并交换两个索引。您可以使用这两种方法。在main方法中,您需要首先生成一个数组,然后在对数组进行排序时循环遍历该数组。

我看到的问题是,当其检查的元素已经是最小值时,locateMin函数中存在问题

static int locateMin (int start, int[] array) {
    int n = 0;
    int value = array[n]; 
    int location = 0; //Location is set to 0
    for (n= start; n < array.length; n++) {
        if (array[n] < value){ //There are no values smaller than it.
            value = array[n];
            location = n;
        }
    }
    return location; //returns 0

}

您正在
locateMin(…)
中设置
n=0
,因此您正在设置
int value=array[n]
i、 e.
value=array[0]
,这意味着您最初将数组的第一个值设置为最小值,并使用它进行进一步比较。
只需替换以下内容:

int n = 0;
int value = array[n]; 
int location = 0;
locateMin(…)
中,使用以下命令:

int n = array.length - 1;
int value = array[n];
int location = n;

考虑添加样本输入和预期输出。这将极大地节省理解您的目标的时间。例如,如果数组是[12 6 7 45 54 69 23 1 0 23],那么在交换三次之后,它应该是[0 1 6 45 54 69 23 7 12 23]是的,在放下我的交换和定位方法后,我将实现一个选择排序方法,现在它将给我一个错误的结果。那么我应该在locateMin中使用我的min方法来简化迭代吗?提供min方法是因为我认为其他方法会使用它,但我还没有找到一种方法。如果您没有实现完全选择排序,那么数组将无法完全排序。判断的唯一方法是完全编写排序,然后测试它。您可以轻松地测试min()方法,而无需排序。您还应该能够在不进行排序的情况下测试交换。我可能误解了你的要求。我的想法是让方法协调一致,这样我就可以在不首先实现选择排序的情况下对值进行排序。我列出了两种方法。如果你不能从那里弄明白,我也可以写一个main方法来演示如何使用这些方法等等。
static int locateMin (int start, int[] array) {
    int n = 0;
    int value = array[n]; 
    int location = 0; //Location is set to 0
    for (n= start; n < array.length; n++) {
        if (array[n] < value){ //There are no values smaller than it.
            value = array[n];
            location = n;
        }
    }
    return location; //returns 0

}
    int n = start;
    //...
    int location = n;
int n = 0;
int value = array[n]; 
int location = 0;
int n = array.length - 1;
int value = array[n];
int location = n;