我正试图创建一个程序,要求用户输入一个数字,即在数组中生成1-100个之间的随机数。然后我希望最大号码与最后一个号码交换,最小号码与第一个号码交换。这里是我的代码到目前为止:如何将最大数字与数组中的最后一个数字交换?
import java.util.Scanner;
import java.util.Random;
public class smallbig
{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
Random randomGenerator = new Random();
int num = scan.nextInt();
int[] myArray = new int[num];
for (int i = 0; i < myArray.length; ++i) {
int randomInt = randomGenerator.nextInt(100);
myArray[i] = randomInt;
}
int smallest = myArray[0];
int largest = myArray[0];
for (int i = 1; i < myArray.length; i++) {
if (myArray[i] > largest) {
largest = myArray[i];
}
if (myArray[i] < smallest) {
smallest = myArray[i];
}
}
for (int j = 1; j < myArray.length; j++) {
int first = myArray[0];
myArray[0] = smallest;
smallest = first;
int temp = largest;
int last = myArray.length;
myArray[last - 1] = largest;
temp = myArray[last - 1];
System.out.print(myArray[j] + " ");
}
}
}
我似乎无法得到数字正确交换。我创建了一个循环来确定生成的最小和最大的数字,并将这些数字存储起来。然后我创建一个循环,执行必要的交换,但我似乎无法让它正常工作。它可以很好地用最后一个数字交换最大数字,但大多数时间(并非总是)输出的最后一个数字也出现在数组中的其他位置。这里是我的意思是:
input: 10
output: 62 48 34 0 91 14 64 60 91
我知道有,我可以用一个交换技术的方法,但我想通过手动交换数字来做到这一点。任何帮助表示赞赏,谢谢。
您正在做的交换只有一半。你把最小的值放在数组的第一个位置,但是你没有把第一个值放回你从中取得最小值的数组中。您需要跟踪最小值的数组索引,以便完成交换。 – stark
你不应该使用循环来交换值。 –