日期:2014-05-20  浏览次数:20901 次

【求助】关于数组元素变换的问题探讨
本帖最后由 quickily 于 2013-03-18 16:57:30 编辑
题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
思路: 未完成,程序有问题。Exer35.java Exer35_3.java
1、 输入一个数组,以-1做为结束标志。
2、 在数组内部做循环判断,最大的一位标识为Max,最小的一位标识为Min,并得到最大元素的排位数。
3、 最大的与第一个元素交换,输出得到数组
4、 在新数组内部做循环判断,得到最小元素的排位数。
5、 最小的与最后一个元素交换。

在解决这个问题时 ,遇到了困难,当最大值和最小值在首尾时,或者在最大值和首位调换。,或者最小值和尾位调换,把位置弄混。
求帮忙看下,如何才能确认准确无误。
设计的测试用例如下:
说明                                      测试数据                 预期结果 实际结果
首位为最大值,末位为最小值               9、3、7、5、1         9、3、7、5、1
首位为最小值,末位为最大值               1、3、7、5、9         9、3、7、5、1
首位为最大值,最小值位于中间               9、3、1、7、5         9、3、5、7、1
首位为最小值,最大值位于中间               1、3、9、7、5         9、3、5、7、1
末位为最大值,最小值位于中间               3、1、7、5、9         9、3、7、5、1
末位为最小值,最大值位于中间               3、9、7、5、1         9、3、7、5、1
首末均非最大、最小值。最小值位于最大值左边。  3、1、9、7、5         9、5、3、7、1
首末均非最大、最小值。最大值位于最小值左边。  3、9、1、7、5         9、3、5、7、1
源码如下:
import java.util.*;
public class Exer35_4  
{
public static void main(String[] args) 
{
int i,j;
int k = 0; //标识输入数组的元素个数
int numMax = 0;
int numMin = 0;
int idx1 = 0; //初始最大元素的排位数
int idx2 = 0; //初始最小元素的排位数
int temp = 0;
int t = 0;
int[] a = new int[20]; ////定义所能输入的最大数组
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个元素个数不大于20的数组,以-1做为输入结束标志:");
for (i = 0; i <= 20; i++) //得到输入数组的元素值,以及个数。
{
a[i] = sc.nextInt();
if (a[i] == -1)
{
break;
}
k = i + 1;
}
System.out.print("输入的数组元素个数为:" + k + ",数组元素分别为:");
for (j = 0; j < k; j++)
{
System.out.print(a[j] + " ");
}
numMax = a[0];
numMin = a[k-1];
for (j = 0; j < k; j++)
{
if (a[j] > numMax)
{
numMax = a[j];
idx1 = j;
}
}
idx2 = k -1;
for (j = 0; j < k; j++) //若最小值为最后一位,则idx2 为初始值,即为0,需考虑此情况。
{
if (a[j] < numMin)
{
numMin = a[j];
idx2 = j;
}
}
System.out.println();
System.out.print("最大的元素为:" + a[idx1]);
System.out.print(",最小的元素为:" + a[idx2]);
System.out.println();
System.out.println("最大元素的下标为:" + idx1 + ",最小元素的下标为:" + idx2);