从键盘读入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] + " ");
}
}
答案 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)
删除每个循环内的循环。它只会让你遍历数组太多次。
您可以将最小和最大循环合并在一起。并在同一遍历中找到最大值和最小值。 (这基本上节省了记忆往返)。