交换数组的最大值和最小值

时间:2014-09-15 20:43:13

标签: arrays

从键盘读入10输入,并将它们存储在一个数组中。找到数组中最大值和最小值的位置(或索引),并交换它们(将最大元素移动到最小元素的位置,并将最小元素移动到最大元素的位置)并再次打印。如果用户输入7,13,-5,10,6,那么您的程序应该打印7,-5,13,​​10,6

这是我的代码。如果你能对它发表评论那就太棒了。

import java.util.Scanner;

public class Task2
{
    public static void main(String [] args)
    {
        Scanner scn = new Scanner(System.in);
        int [] source = new int[10];
        for(int i=0; i<10; i++)
           source[i] = scn.nextInt();

        int maxIndex = 0;
        int max = source[0];
        for(int i=0; i<10; i++)
        {
            for(int j=i+1; j<10; j++)
            {
               if(source[j]>max)
               {
                  maxIndex = j;
                  max = source[maxIndex];
               }
            }
        }
        int minIndex = 0;
        int min = source[0];
        for(int i=0; i<10; i++)
        {
            for(int j=i+1; j<10; j++)
            {
                if(source[j]<min)
                {
                   minIndex = j;
                   min = source[minIndex];
                }
            }
        }
        int temp = source[minIndex];
        source[minIndex] = source[maxIndex];
        source[maxIndex] = temp;
        for(int i=0; i<10; i++)
           System.out.print(source[i] + " ");
    }
}    

2 个答案:

答案 0 :(得分:0)

你的嵌套for循环是低效的,而且并不是很明显发生了什么。我假设这是你问题的一部分。另一个问题是您实例化一个10元素数组,但输入中可能没有10个元素。

这可能更适合这项法案。

import java.util.Scanner;

public class Task2 {
    public static void main(String [] args) {
        Scanner scanner = new Scanner(System.in);
        int [] source = new int[10];
        for(int i = 0; i < 10; i++)
           source[i] = scanner.nextInt();

        int maxIndex = 0,
            minIndex = 0;

        for (int i = 0; i < source.length; i++) {
            int currentValue = source[i];

            if (currentValue > source[maxIndex]) {
                maxIndex = i;
            }

            if (currentValue < source[minIndex]) {
                minIndex = i;
            }
        }


        int temp = source[maxIndex];
        source[maxIndex] = minValue;
        source[minIndex] = temp;

        for(int i = 0; i < source.length; i++) {
           System.out.print(source[i] + " ");
        }
    }
}

答案 1 :(得分:0)

  1. 删除每个循环内的循环。它只会让你遍历数组太多次。

  2. 您可以将最小和最大循环合并在一起。并在同一遍历中找到最大值和最小值。 (这基本上节省了记忆往返)。