【问题标题】:Creating an array and then get min using while loop [duplicate]创建一个数组,然后使用while循环获取最小值[重复]
【发布时间】:2017-04-25 07:20:02
【问题描述】:
Scanner input = new Scanner(System.in);
int[] numbers = new int[10];

for (int i = 0; i < numbers.length; i++)
{
    System.out.println("Please enter number");
    numbers[i] = input.nextInt();
}

for (int i = 10 ; i > numbers.length ; i++)
{
    int min = numbers [i];
    if ( numbers [i] > min)
    numbers [i] = input.nextInt();
}
System.out.println("the min values is " + min  );

我停在这里..请帮助
我想从用户的输入中计算最小值

【问题讨论】:

  • 为什么要为最小值创建一个数组?根据定义,只有一个最小值。
  • 一定要用数组吗?您可以只取输入值的最小值。
  • 您的循环不一致,这可能是您困惑的一部分。永远不会进入第二个循环。
  • ...请在发布之前修复您的编译器错误。
  • 我必须使用数组和 for while :)

标签: java arrays min


【解决方案1】:

您不必使用 2 个for 循环。你甚至不需要一个数组。看看:

import java.util.*;

public class Main {
    public static void main (String[] args) {
        Scanner input = new Scanner(System.in);
        int min = Integer.MAX_VALUE;

        for (int i = 0; i < 10; i++) {
            System.out.println("Please enter number");
            int number = input.nextInt();

            if (number < min) {
                min = number;
            }
        }

        System.out.println("the min values is " + min);
    }
}

【讨论】:

    【解决方案2】:

    你可以做最少 10 个输入

    Scanner input = new Scanner(System.in);
    int min = InStream.range(0, 10)
                      .peek(i -> System.out.println("Please enter number"))
                      .map(i -> input.nextInt())
                      .min();
    System.out.println("the min values is " + min);
    

    你的代码有什么问题

    for (int i = 10 ; i > numbers.length ; i++)
    

    这行不通,因为最后一个索引是 [9] 而不是 [10] 而且你是递增而不是递减,你需要类似的东西

    for (int i = numbers.length-1 ; i >= 0 ; i--)
    

    您将能够在调试器中看到这一点,或者通过阅读诸如ArrayIndexOutOfBoundException: 10 之类的错误消息

    【讨论】:

    • 是的,它可以工作并且可以完成工作,但是如果 OP 在简单的 for 循环方面遇到问题,我认为您的回答对他没有任何意义。
    • @TDG 我怀疑使用调试器或读取错误消息是其他一些没有任何意义的东西。
    • 我在这里学习..
    • @mo7al876我的任何提示是,当您收到错误消息时,请阅读它。如果您不知道这意味着什么,请在 Google 上搜索或至少将其发布在问题中。
    • @mo7al876any 我已经为您的代码添加了最简单的修复方法。
    【解决方案3】:

    首先你需要了解很多事情你的代码是错误的。

    方法一:

    Scanner input = new Scanner(System.in);
    int[] numbers = new int[10];
    
    for (int i = 0; i < numbers.length; i++)
    {
        System.out.println("Please enter number");
        numbers[i] = input.nextInt();
    }
    int min = numbers [0]; // Need to initialize it here outside the loop
    for (int i = 1 ; i < numbers.length ; i++) // Need to count from 2nd element to the last
    {
        if ( numbers [i] < min) // changing condition if number is less than min
             min = numbers [i]; // setting min to that number
    }
    System.out.println("the min values is " + min  );
    

    方法 2: 在这里,我们在用户输入值时检查最小值。

    Scanner input = new Scanner(System.in);
    int[] numbers = new int[10];
    boolean flagForMin = true;
    int min;
    for (int i = 0; i < numbers.length; i++)
    {
        System.out.println("Please enter number");
        numbers[i] = input.nextInt();
        if(flagForMin) {
            min=numbers[i];
            flagForMin=false;
        } else {
             if ( numbers [i] < min) 
                min = numbers [i];
        }
    }
    System.out.println("the min values is " + min  );
    

    这些是使用 for 循环方法,您可以通过在循环之前初始化并在循环的最后一个语句中递增计数器来将循环更改为 while。

    EG:

    Scanner input = new Scanner(System.in);
    int[] numbers = new int[10];
    boolean flagForMin = true;
    int min;
    int i = 0;
    while( i < numbers.length)
    {
        System.out.println("Please enter number");
        numbers[i] = input.nextInt();
        if(flagForMin) {
            min=numbers[i];
            flagForMin=false;
        } else {
             if ( numbers [i] < min) 
                min = numbers [i];
        }
        i++;
    }
    System.out.println("the min values is " + min  );
    

    【讨论】:

    • 谢谢你救了我
    猜你喜欢
    • 2021-11-13
    • 2017-11-10
    • 1970-01-01
    • 1970-01-01
    • 2015-03-10
    • 1970-01-01
    • 1970-01-01
    • 2017-08-19
    • 1970-01-01
    相关资源
    最近更新 更多