【问题标题】:find the highest and lowest number in array with JOptionPane [Closeed]使用 JOptionPane [Closed] 查找数组中的最高和最低数字
【发布时间】:2018-09-19 08:16:02
【问题描述】:

用于大学教育的代码 我需要用户插入一个数组值并找出哪个数字是最高和最低的,但最低的数字不起作用。 谁能给我解释一下,不好意思问太多了

int m=Integer.parseInt(JOptionPane.showInputDialog("Enter index"));       
int values;
int num [] = new int [m];

int max = num[0];
int min = num[0];
for (int i=0;i<num.length;i++)      
     {                          
     num[i] = values =Integer.parseInt(JOptionPane.showInputDialog("Enter value"));   
     System.out.println(num[i]);

     if (num[i] > max)
     {
         max=num[i];
     }
     if (num[i] < min )
     {
         min=num[i];
     }

}                                    
System.out.println("Largest Number in a given array is : " + max);
System.out.println("Smallest Number in a given array is : " + min);

【问题讨论】:

  • num[i] = values =Integer.parseInt(JOptionPane.showInputDialog("Enter value")); 为什么中间有values
  • 这段代码有很多错误。您需要学习 if then else 控制流docs.oracle.com/javase/tutorial/java/nutsandbolts/if.html 的基础知识。如果某事物是 X 并且大于 Y,则它也不能小于 Y 或等于 Y。此外,您还希望对可以使用集合来完成的集合进行排序。
  • 为什么“索引”定义了数组的大小??
  • 首先,读取元素,然后循环遍历数组以比较它们。此时,如果你所有的数字都是负数,你会(错误地)得到 0 作为最大值

标签: java arrays if-statement joptionpane


【解决方案1】:

您可以使用Arrays.sort() 对数组进行排序,并简单地访问第一个(第 0 个)索引,该索引将保存最小的数字,最后一个索引将保存最大的数字:

int m=Integer.parseInt(JOptionPane.showInputDialog("Enter index"));       
 //int values; dont need this
 int num [] = new int [m]; //num is initialised with length entered by the user

 //int max = num[0]; no need
 //int min = num[0]; no need
 for (int i=0;i<num.length;i++)      
 {                          
  num[i] = Integer.parseInt(JOptionPane.showInputDialog("Enter value"));   
  System.out.println(num[i]);      

 }
Arrays.sort(num); //this will sort your array in ascending order: smallest number will be at the 0th index and largest will be at the last index                                    
System.out.println("Largest Number in a given array is : " + num[num.length-1]);
System.out.println("Smallest Number in a given array is : " + num[0]);

【讨论】:

    【解决方案2】:

    欢迎,

    int[] num= new int[4];
    

    初始化num后,num为{0,0,0,0};

    int max = num[0];
    int min = num[0];
    

    所以现在 min 将为 0,因为 num[0] 为 0 - 无论您输入什么。

    num[i] = values =Integer.parseInt(JOptionPane.showInputDialog("Enter value"));   
    System.out.println(num[i]);
    if(i == 0)
          min = num[i];
    

    试试这个并考虑一下(最大值相同)

    【讨论】:

      【解决方案3】:

      您的代码中存在一些错误 - 因此使用您的尝试,您可以将第一个值设置为 从用户接收到的最小值和最大值,然后从那里开始工作:

      int m = Integer.parseInt(JOptionPane.showInputDialog("Enter index"));
      int num[] = new int[m];
      int max = Integer.parseInt(JOptionPane.showInputDialog("Enter value"));
      System.out.println(max);
      int min = max;
      for (int i = 0; i < num.length - 1; i++) {
          num[i] = Integer.parseInt(JOptionPane.showInputDialog("Enter value"));
          System.out.println(num[i]);
          if (num[i] > max) {
              max = num[i];
          } else if (num[i] < min) {
              min = num[i];
          }
      }
      System.out.println("Largest Number in a given array is : " + max);
      System.out.println("Smallest Number in a given array is : " + min);
      

      使用 3、8、6、4 和 -33 5 个输入,输出为:

      给定数组中的最大数是:8

      给定数组中的最小数是:-33


      只是为了好玩,这里有一个效率很低的替代解决方案:

      System.out.println(Arrays.stream(num).boxed().mapToInt(Integer::intValue).max().getAsInt());
      System.out.println(Arrays.stream(num).boxed().mapToInt(Integer::intValue).min().getAsInt());
      

      当然,您也可以使用Arrays.sort() 对数组进行排序,然后使用array[array.length() - 1] 找到最大值,使用array[0] 找到最小值

      【讨论】:

      • 他想根据第一个输入(用户输入索引后)显示输入对话框x次,以获取用户的输入并将它们放入数组中。您的代码要求额外输入 1 次,因此无法回答问题。
      • @darkPain 确实如此 - 这就是我将 i &lt; num.length - 1 放入循环中的原因。
      • 啊,我明白了,对不起
      【解决方案4】:

      您可以使用Integer.MAX_VALUEInteger_MIN_VALUE。整数的最大值为 2147483647(2^31-1),整数的最小值为 -2147483648(-2^31)

      int m=Integer.parseInt(JOptionPane.showInputDialog("Enter index"));       
      int num [] = new int [m];
      int max = Integer.MAX_VALUE;
      int min = Integer.MIN_VALUE;
      
       for (int i=0;i<num.length;i++)      
       {                          
           num[i] = values =Integer.parseInt(JOptionPane.showInputDialog("Enter value"));   
           System.out.println(num[i]);
           if (num[i] > max)
           {
               max=num[i];
           }
           if (num[i] < min )
           {
               min=num[i];
           }
      }  
      

      希望这对你有用。

      【讨论】:

      • 是的,这是最好的解决方案,但关键是不要使用内置函数。
      猜你喜欢
      • 1970-01-01
      • 2021-07-02
      • 1970-01-01
      • 1970-01-01
      • 2022-01-05
      • 2017-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多