【问题标题】:Java - Finding minimum numberJava - 寻找最小数量
【发布时间】:2011-12-06 10:49:30
【问题描述】:
以下代码应该读取一些数字并将“
import java.util.ArrayList;
import java.util.Scanner;
public class arrayex1 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
ArrayList<Integer> numbers = new ArrayList<Integer>();
System.out.println("Enter numbers: ");
for (int i = 0; i < 10; i++) {
int num = input.nextInt();
numbers.add(num);
}
for (int i = 0; i < numbers.size(); i++) {
if (numbers.get(findMin(numbers)) == i) { // If the 'smallest' index value is equal to i.
System.out.println(numbers.get(i) + " <== Smallest number");
} else {
System.out.println(numbers.get(i));
}
}
}
public static int findMin(ArrayList<Integer> n) {
int min = 0; // Get value at index position 0 as the current smallest.
for (int i = 0; i < n.size(); i++) {
if (n.get(i) < min) {
min = i;
}
}
return min;
}
}
【问题讨论】:
标签:
java
if-statement
for-loop
【解决方案1】:
if (numbers.get(findMin(numbers)) == i) { // If the 'smallest' index value is equal to i.
通过调用numbers.get(),您可以在i 处获取槽的值。
【解决方案2】:
findMin()中的变量min实际上是n中最小数的索引。
改变这个:
if (n.get(i) < min)
到:
if (n.get(i) < n.get(min))
在进入for循环之前存储findMin()的返回值:
final int min_idx = findMin(numbers);
for (int i = 0; i < numbers.size(); i++) {
if (min_idx == i) { // If the 'smallest' index value is equal to i.
System.out.println(numbers.get(i) + " <== Smallest number");
} else {
System.out.println(numbers.get(i));
}
}
【解决方案4】:
这是一个改进的工作示例(尽管没有扫描仪输入以便于测试):
public static void main(String[] args){
ArrayList<Integer> numbers = new ArrayList<Integer>();
numbers.add(5);
numbers.add(7);
numbers.add(3);
int minIndex = findMin(numbers);
for(int i = 0; i < numbers.size(); i++){
if(minIndex == i){ // If the 'smallest' index value is equal to i.
System.out.println(numbers.get(i) + " <== Smallest number");
}else{
System.out.println(numbers.get(i));
}
}
}
public static int findMin(ArrayList<Integer> n){
int minValue = Integer.MAX_VALUE; // Get value at index position 0 as the current smallest.
int minIndex = -1;
for(int i = 0; i < n.size(); i++){
if(n.get(i) < minValue){
minIndex = i;
}
}
return minIndex;
}
对于 findMin 方法是否返回最小值或最小索引存在一些混淆。它现在返回最小索引。 findMin 现在也只调用一次,而不是循环中的每次迭代,这样更简洁(而且速度稍快)。
【解决方案5】:
if (n.get(i) < min)
应该是:
if (n.get(i) < n.get(min))
See it
【解决方案6】:
只需更改以下代码,它肯定会工作。
**if (numbers.get(findMin(numbers)) == numbers.get(i))**
{ // If the 'smallest' index value is equal to i.
System.out.println(numbers.get(i) + " <== Smallest number");
}
and
public static int findMin(ArrayList<Integer> n)
{
int min = 0; // Get value at index position 0 as the current smallest.
for (int i = 0; i < n.size(); i++)
{
**if (n.get(i) < n.get(min))**
{
min = i;
}
}
return min;
}
【解决方案7】:
您看到了意外行为,因为您没有遵守List.get() 的合同。该方法需要一个 index 作为参数并返回 value。您不应将get() 返回的值与索引进行比较。
此外,在您的 findMin() 方法中,您应该将 min 初始化为 Integer.MAX_VALUE。