以下代码应该读取一些数字并在最小值旁边加上“< ==最小数字”。这是我的问题?它似乎没有工作!每次它似乎都将错误的数字指定为最小值。
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;
}
}
答案 0 :(得分:1)
if (numbers.get(findMin(numbers)) == i) { // If the 'smallest' index value is equal to i.
通过致电numbers.get()
,您可以在i
获取广告位的值。
答案 1 :(得分:1)
min
中的变量findMin()
实际上是n
中最小数字的索引。
改变这个:
if (n.get(i) < min)
为:
if (n.get(i) < n.get(min))
在进入findMin()
循环之前存储for
的返回值:
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));
}
}
答案 2 :(得分:0)
您会看到意外行为,因为您不遵守List.get()
的合同。该方法需要索引作为参数,并返回值。您不应将get()
返回的值与索引进行比较。
另外,在findMin()
方法中,您应该将min
初始化为Integer.MAX_VALUE
。
答案 3 :(得分:0)
您可以使用集合排序方法对列表进行排序。 Documentation
排序后第一个元素将是最小的元素
答案 4 :(得分:0)
这是一个改进的工作样本(虽然没有扫描仪输入以便于测试):
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 :(得分:0)
答案 6 :(得分:0)
只需更改以下代码即可。
**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;
}