我正在编写一个程序,它从键盘中取出10 Integer
并将它们列在一个索引为0-9的数组中,并报告数组中最小数字的位置。如果最小的数字具有除0以外的任何其他位置,则程序应该将最小数字输入的位置切换为数组中第一个位置的数字:
import java.util.Scanner;
public class q35 {
public static void main(String args[]) {
Scanner tastatur = new Scanner(System.in);
int[] helTall = new int[10];
int input;
int lowest = Integer.MAX_VALUE;
for(int i=0;i<helTall.length;i++) {
System.out.println("Integers? ");
input = tastatur.nextInt();
if (input < lowest) {
lowest = input;
}
helTall[i] = input;
}
for (int i = 0; i < helTall.length; i++) {
helTall[0] = lowest;
System.out.println(helTall[i]);
}
System.out.println("Lowest number is " + lowest);
}
}
唯一的问题是,不是使用helTall[0]
处的数字更改最低编号的位置,而是使用最低helTall[0]
完全替换序列Integer
中的第一个数字,这样,如果我的输入为4 5 63 23 6 -4 7 33 23 99
,则输出变为-4 5 63 23 6 -4 7 33 23 99
(因为您可以看到第一个输入数字被完全删除),但它应该是-4 5 63 23 6 4 7 33 23 99
任何提示/建议/解决方案?提前谢谢。
答案 0 :(得分:1)
您应该跟踪最低编号的索引(每次编写lowest = input;
时都应添加lowestIndex=i;
。
然后helTall[lowestIndex]
将是最低的数字
因此,您将helTall[lowestIndex]
与helTall[0]
交换,而不是仅覆盖helTall[0]
的值。
我认为用文字描述解决方案已经足够了,但我想这不是......
int lowest = Integer.MAX_VALUE;
int lowestIndex = 0;
for(int i=0;i<helTall.length;i++){
System.out.println("Integers? ");
input = tastatur.nextInt();
if (input < lowest){
lowest = input;
lowestIndex = i;
}
helTall[i]=input;
}
// swap the numbers
if (lowestIndex > 0) {
int temp = lowest;
helTall[lowestIndex] = helTall[0];
helTall[0] = temp;
}
// display output
for (int i = 0; i < helTall.length; i ++) {
System.out.println(helTall[i]);
}
答案 1 :(得分:0)
这部分错了:
for (int i = 0; i < helTall.length; i ++) {
helTall[0]=lowest;
System.out.println(helTall[i]);
}
首先,您不需要重复(10次)将lowest
放入helTall[0]
。让我们首先将其移到外面,这样只做一次:
helTall[0]=lowest;
for (int i = 0; i < helTall.length; i ++) {
System.out.println(helTall[i]);
}
接下来,我们放在循环外面的行会覆盖helTall [0],而不考虑其中的内容。我们需要在其他地方临时保存该号码,然后覆盖该点,以便我们可以用它来覆盖最低号码所在的地点:
int numberAtLocationZero = helTall[0];
helTall[0]=lowest;
// Now, on this line we need to write helTall[lowestNumberIndex] = numberAtLocationZero;
for (int i = 0; i < helTall.length; i ++) {
System.out.println(helTall[i]);
}
在上面的代码中我写了一条评论。它依赖于你要么知道数组中最低的数字在哪里,要么再次找到它。如果您在代码中添加一个新变量,该变量会接收名为lowestNumberIndex
的值,并在每次检测到新的最低数字时更新该变量,那么如果您取消注释我的评论,那么您就已经完成了很多工作。
答案 2 :(得分:0)
在使用新的最低输入数字覆盖数组之前,需要一个单独的变量来存储数组底部的内容。
helTall[0]=lowest;
应该按
进行int placeholder = helTall[0]
然后是
hellTall[i] = placeholder;
这样,你最终会交换两个数组元素,第一个与最低数组交换。这是你想要完成的吗?这使得大多数数组都未排序。
答案 3 :(得分:-1)
使用嵌套for循环找到最低的no,然后通过与array比较找到它的索引 并交换第一个位置的值和最低值不存在的索引值