随机int数组不打印min和max

时间:2017-10-27 12:39:02

标签: java arrays random max min

我是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

3 个答案:

答案 0 :(得分:0)

这就是你要找的东西::

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&GT;您已在for循环中声明了数组int[] array = new int[userNum]; 。这意味着它将创建与循环迭代一样多的数组。外循环无法访问。

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

相同

3&GT; for (x = 1; x < 1; x++)控制永远不会进入循环,因为你的条件x <1永远不会满足,因为你已经启动x = 1并且它永远不会小于1,因为条件(x <1)。

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

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

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

2 - ;&GT;这里只是单独打印数组,以便在输出中更好地呈现。

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

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

答案 1 :(得分:0)

    //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];
      }

同样适用于最小的。

注意:我建议不要评论关闭括号。注意只是不必要的努力,这是容易混淆的:在上面的代码片段中,//for//if是相反的。此外,它并没有告诉你哪个&#34;如果&#34;或者&#34;对于&#34;它正在关闭。

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

答案 2 :(得分:0)

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

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);
    }
}

到目前为止largest实际上是数组中的最大值或最小值时,您应该只设置smallestarray[s]。要检查是否是这种情况,您可以使用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);