【问题标题】:Random int array not printing min and max随机 int 数组不打印最小值和最大值
【发布时间】:2018-04-09 01:43:39
【问题描述】:

我是 Java 新手(以及一般的编码)。我需要编写一个获取整数的方法,创建一个由整数长度的随机数组成的数组,范围为 1-50 (含)并找到最大和最小数字。

我能够用随机数填充数组。但是,我的最小值和最大值没有打印。我一直在看这个几个小时没有运气 - 任何建议都会非常有帮助!谢谢你。

import java.util.Scanner;
import java.util.Random;
class MinMax {
  public static void main(String args[]) {

    Scanner in = new Scanner(System.in);
    //user input a number
    System.out.println("Please enter an integer from 1 to 50: ");
    int userNum = in .nextInt();
    System.out.println();

    int x;
    int randNum;
    int y;
    //create random numbers and print
    Random r = new Random();
    for (int i = 1; i <= userNum; i++) {
      randNum = r.nextInt(50) + 1;
      System.out.println(randNum);
      int[] array = new int[userNum];
      for (x = 1; x < 1; x++) {
        array[x] = randNum;
        System.out.println(array[x]);
        //find max
        int largest = array[0];
        int smallest = array[0];
        for (int s = 0; s < array.length; s++) {
          largest = array[s];
          smallest = array[s];
          if (array[s] > largest) {
            System.out.println(largest);
            //find min
          } else if (array[s] < smallest) {
            System.out.println(smallest);


          } //for
        } //if
      } //for
    } //for


  } //main method
} //class

【问题讨论】:

  • 能去掉js代码标签吗?
  • 它将如何打印这是 (x = 1; x

标签: java arrays random max min


【解决方案1】:

这就是你要找的::

import java.util.Scanner;
 import java.util.Random;

 public class MinMax {
public static void main(String args[]) {

    Scanner in = new Scanner(System.in);
    // user input a number
    System.out.println("Please enter an integer from 1 to 50: ");
    int userNum = in.nextInt();
    System.out.println();

    int x;
    int randNum;
    int y;
    int[] array = new int[userNum];
    // create random numbers and print
    Random r = new Random();
    for (int i = 1; i <= userNum; i++) {
        randNum = r.nextInt(50) + 1;
        System.out.println("number " + i + ":: " + randNum);

        array[i - 1] = randNum;

    }

    // print array
    for (int s = 0; s < array.length; s++) {
        System.out.println("array[" + s + "] number :: " + array[s]);
    }
    // find max
    int largest = array[0];
    int smallest = array[0];
    for (int s = 0; s < array.length; s++) {

        if (array[s] > largest) {
            largest = array[s];

            // find min
        } else if (array[s] < smallest) {
            smallest = array[s];

        }
    }
    System.out.println("\nLargets Number:: " + largest);
    System.out.println("Smallest Number:: " + smallest);

} // main method
} // class

在使用循环时不要混淆太多。在编写代码时犯的一些错误。

1> 您已在 for 循环中声明数组 int[] array = new int[userNum]; 。这意味着它将创建与循环迭代一样多的数组。并且无法在循环外访问。

2> 与变量最大和最小相同int largest = array[0]; int smallest = array[0];

3> for (x = 1; x &lt; 1; x++) 控制永远不会进入循环,因为您的条件 x

建议 :: 要找到最大的,您必须遍历数组并检查每个元素的最大和最小并将其存储在单独的变量中,而不是在每次检查时打印它。

在我的代码中,我使用了三个 for 循环::

1>> 生成并打印随机数。在同一个循环中,我用生成的数字填充数组。

2>>这里只是单独打印数组以便更好地显示输出。

3>> 如果满足条件,则通过在 if 块中分配值来查找最大和最小。

我希望这将帮助您理解代码。

【讨论】:

  • 转储代码 - 即使它是正确的 - 也不是一个好的答案,因为 OP 必须仔细检查并计算出你所做的更改。您应该解释所做的更改,并删除与这些更改无关的任何内容。
  • @AndyTurner,你是对的,我会尽我所能。谢谢你的建议。
【解决方案2】:

您的程序没有用随机数填充数组。它创建了几个数组并用一个数字填充每个数组。您应该更改程序的这一部分:

Random r = new Random();
for (int i = 1; i <= userNum; i++) {
    randNum = r.nextInt(50) + 1;
    System.out.println(randNum);
    int[] array = new int[userNum];
    for (x = 1; x < 1; x++) {
        array[x] = randNum;
        System.out.println(array[x]);

        /* min-max code */
    }
}

到这里:

Random r = new Random();
int[] array = new int[userNum];
for (int i = 0; i <= userNum; i++) {
    array[i] = r.nextInt(50) + 1;
    System.out.println(array[i]);
}

/* min-max code */

这将创建一个数组,用随机数填充它,并打印数组的每个元素,这似乎是您想要的。

求最小值和最大值的代码也不正确。

int largest = array[0];
int smallest = array[0];
for (int s = 0; s < array.length; s++) {
    largest = array[s];
    smallest = array[s];
    if (array[s] > largest) {
        System.out.println(largest);
    } else if (array[s] < smallest) {
        System.out.println(smallest);
    }
}

只有当array[s] 实际上是迄今为止数组中的最大值或最小值时,才应设置largestsmallest。要检查是否是这种情况,您可以使用Math.min()Math.max(),它们分别返回两个值中的最小值或最大值。

int largest = array[0];
int smallest = array[0];
for (int s = 0; s < array.length; s++) {
    largest = Math.max(array[s], largest);
    smallest = Math.min(array[s], smallest);
}
System.out.println(largest);
System.out.println(smallest);

【讨论】:

    【解决方案3】:
        //find max
        int largest = array[0];
        int smallest = array[0];
        for (int s = 0; s < array.length; s++) {
          largest = array[s];
          smallest = array[s];
          if (array[s] > largest) {
            System.out.println(largest);
            //find min
          } else if (array[s] < smallest) {
            System.out.println(smallest);
          } //for
        } //if
    

    仔细查看这段代码。在循环内部,您正在设置

    largest = array[s];
    

    然后立即检查

    if (array[s] > largest)
    

    当然不是,你只是让他们平等!

    将赋值放在条件中:

          // Remove largest = array[s]
          if (array[s] > largest) {
            largest = array[s];
          }
    

    同样适用于最小。


    注意:我建议不要评论右括号。请注意,这是不必要的努力,容易混淆:在上面代码的这个 sn-p 中,//for//if 是相反的。此外,它不会告诉您它正在关闭哪个“if”或“for”。

    只看缩进是一种更简单的方法。

    【讨论】:

      猜你喜欢
      • 2020-09-02
      • 1970-01-01
      • 2020-03-10
      • 2018-07-01
      • 2018-08-01
      • 2021-05-23
      • 2020-09-06
      • 2015-02-20
      • 2016-06-27
      相关资源
      最近更新 更多