2016-05-05 3 views
-4

У меня возникают проблемы с получением моих значений min и max для печати. Также как новый , поскольку я для программирования, я не понимаю, почему все мои значения являются десятичными. Я отправлю код и мои результаты.Min Максимальные значения случайного массива

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

public class RandomArray1 
extends ArrayList<Double> 
    { 
     private static final long serialVersionUID = 1L; 

     public RandomArray1() 
     { 
      super(); 
     } 

     public static RandomArray1 getInstance(int size) 
      { 
       Random randomNumberGenerator = new Random(); 
       RandomArray1 randomArray = new RandomArray1(); 

      for (int i = 0; i < size; i++) 
       { 
        randomArray.add(randomNumberGenerator.nextDouble()); 
       } 

       return randomArray; 
      }  



     public Double getAverage() 
     { 
      if (this.size() == 0) 
      { 
       return 0d; 
      } 

      Double sum = 0d; 

      for (Double element : this) 
       { 
        sum = sum + element; 
       } 
      return sum/this.size(); 
     } 


     public static void main(String[] args) 
     { 
      Scanner scan = new Scanner(System.in); 
      System.out.print("Enter how many numbers you would like to Generate: "); 

      RandomArray1 randomArray = RandomArray1.getInstance(scan.nextInt()); 

      System.out.println(randomArray); 
      System.out.println("Average" +randomArray.getAverage()); 

      double max = Double.MIN_VALUE; 
      double min = Double.MAX_VALUE; 

      while (true) { 

       if (!scan.hasNextDouble()) 

        break; 

       Double num = scan.nextDouble(); 

       min = Math.min(min, num); 
       max = Math.max(max, num); 

      System.out.println("Max is: " + max); 
      System.out.println("Min is: " + min); 
     } 
    } 
    } 

Вот мои результаты ...

Введите, сколько номеров вы хотели бы Сформировать: 5 [+0,8630040934474159, 0,12949667753808425, +0,5751777190226718, 0,18492672539115063, +0,7508377917335503] Средний балл: 0,5006886014265746

всегда десятичная точка, и даже не печатает «Макс is:» или «Min is:», из-за чего я думаю, что в этом разделе что-то не так. Но я не знаю, что это ... какие-то мысли. Всего идеи ...

while (true) { 

      if (!scan.hasNextDouble()) 

       break; 

      Double num = scan.nextDouble(); 

      min = Math.min(min, num); 
      max = Math.max(max, num); 

     System.out.println("Max is: " + max); 
     System.out.println("Min is: " + min); 
+0

Программа ожидает ввода числа из-за 'scan.hasNextDouble()' в цикле 'while'. – Jesper

ответ

0

Ваша программа работает отлично:

Enter how many numbers you would like to Generate: 3 
[0.26063976207509887, 0.48867331377683443, 0.3864751544223266] 
Average0.37859607675808665 
4 
Max is: 4.0 
Min is: 4.0 
5 
Max is: 5.0 
Min is: 4.0 
3 
Max is: 5.0 
Min is: 3.0 
end 

Но так как он ожидает ввода, но не говорит об этом, он может казаться «мертвым». Просто включите приглашение перед ожиданием следующего ввода:

System.out.print("Please enter next number: "); 
if (!scan.hasNextDouble()) 
    break; 

В случае, если вы хотели вычислить мин/макс существующего массива вместо нового пользовательского ввода, используйте for цикл для перебора существующего массива:

for (double num : randomArray) { 
     min = Math.min(min, num); 
     max = Math.max(max, num); 

     System.out.println("Max is: " + max); 
     System.out.println("Min is: " + min); 
    } 
+0

ОК, но то, что я действительно хочу, это дать мне максимальный и минимальный значения, напечатанные первоначально ... не уверен, как это сделать. – Savage99

+0

@ Savage99: Если вы замените цикл 'while' на последний фрагмент кода, который я разместил, он будет делать именно это! – mastov

+0

Я сделал это .... это сработало. Однако теперь он дает мне минимальное считывание для каждого числа, сгенерированного ... даже считая, что они одинаковы. Я думаю, я понимаю, почему просто не знаю, как это исправить. Это потому, что он застрял в цикле ... так как я могу это исправить? – Savage99

1

Я думаю, что вы заполняете вы будете массив с nextDouble() который, как documented дает вам двойной точности с плавающей запятой между 0 и 1.

+0

спасибо ... Я изменил на Integer, и он исправил это. Спасибо – Savage99

1

Все хорошо, изменил Arraylist на Integer и все остальное. Это решило мои вопросы, как обсуждалось. вот что выглядит код сейчас ... отлично работает!

import java.util.*; 

public class RandomArray1 
extends ArrayList<Integer> 
    { 
     private static final long serialVersionUID = 1L; 

     public RandomArray1() 
     { 
      super(); 
     } 

     public static RandomArray1 getInstance(int size) 
      { 
       Random randomNumberGenerator = new Random(); 
       RandomArray1 randomArray = new RandomArray1(); 

      for (int i = 0; i < size; i++) 
       { 
        randomArray.add((int) randomNumberGenerator.nextInt()); 
       } 

       return randomArray; 
      }  



     public Double getAverage() 
     { 
      if (this.size() == 0) 
      { 
       return 0d; 
      } 

      Double sum = 0d; 

      for (Integer element : this) 
       { 
        sum = sum + element; 
       } 
      return sum/this.size(); 
     } 


     public static void main(String[] args) 
     { 
      @SuppressWarnings("resource") 
     Scanner scan = new Scanner(System.in); 
      System.out.print("Enter how many numbers you would like to Generate: "); 

      RandomArray1 randomArray = RandomArray1.getInstance(scan.nextInt()); 

      System.out.println(randomArray); 
      System.out.println("Average : " +randomArray.getAverage()); 

      int max = Integer.MAX_VALUE; 
      int min = Integer.MIN_VALUE; 

      for (int num : randomArray) 
      { 
       min = Math.min(min, num); 
       max = Math.max(max, num); 



      } 
      System.out.println("Max is: " + max); 
      System.out.println("Min is: " + min); 

     } 


    } 

большое вам спасибо!

Смежные вопросы