本帖最后由 quickily 于 2013-03-18 16:57:30 编辑

解决方案 »

  1.   

    你将最大值和a[idx1]交换后,a[idx2]的值可能就不是最小值了,所以要在最大值交换完后,再找最小值。
    话说你的程序不能连续输入啊
    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] + " ");
            }
    //将最大的放在a[0]
            numMax = a[0];
            for (j = 0; j < k; j++)                
            {
                if (a[j] > numMax)
                {
                    numMax = a[j];
                    idx1 = j;
                }
            }
            System.out.println();
            System.out.print("最大的元素为:" + a[idx1]);
    if (idx1 != 0)
            {
                temp = a[0];
                a[0] = a[idx1];
                a[idx1] = temp;
            }
            System.out.println("调换最大值后的数组顺序为:");
            for (j = 0; j < k; j++)
            {
                System.out.print("a[" + j + "] = " + " " + a[j] + " ");
            }
    System.out.println();
    //jianng
    numMin = a[k-1];
    idx2 = k -1;
            for (j = 0; j < k; j++)                //若最小值为最后一位,则idx2 为初始值,即为0,需考虑此情况。
            {
                if (a[j] < numMin)
                {
                    numMin = a[j];
                    idx2 = j;
                }
            }
            if (idx2 != k - 1)
            {
                t = a[k-1];
                a[k-1] = a[idx2];
                a[idx2] = t;
            }
    System.out.print(",最小的元素为:" + a[idx2]);
            System.out.println();        for (j = 0; j < k; j++)
            {
                System.out.print("a[" + j + "] = " + " " + a[j] + " ");
            }
            System.out.print("\n调整后得到的最终数组为:");
            for (j = 0; j < k; j++)
            {
                System.out.print(a[j] + " ");
            }
        }
    }
      

  2.   

    for (i = 0; i <= 20; i++)        //得到输入数组的元素值,以及个数。
            {
                a[i] = sc.nextInt();        
                if (a[i] == -1)
                {
                    break;
                }
                k = i + 1;
            }
    此处实现了连续输入。