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