2017-10-01 2 views
3

so in meinem Programm ist, wo der Benutzer Liste der Zahlen einzeln eingeben, und wenn ich die Listennummern mit der "end" -Anweisung, die auf -1 festgelegt ist, und einmal ich tun würde dass ich mein Durchschnitt, und Maximum, und Minimum bekomme, ist mein Problem, dass, wenn ich die minimale Ausgabe bekomme, es -1 immer sein würde, habe ich Schwierigkeiten, die -1 vom Array, irgendwelche Ideen zu entfernen ???Durchschnitt, Minimum, Maximum

import java.util.Scanner; //import scanner to user scanner tool 

public class Average { //creating public class 

    public static void main(String[]args) { //creating public static main 

     Scanner input = new Scanner(System.in); //creating scanner input to grab user input 

     System.out.println("Please enter a list of numbers, entering -1 to end the list: "); 

     double[] numbers = new double[20]; //creating 20 count array 
     double sum = 0; 
     int count = 0; 
     double average; 
     int end = -1; 

     for(int i = 0; i<numbers.length; i++) { 

      System.out.print("Enter a number: "); 
      numbers[i] = input.nextDouble(); 

      if(numbers[i]== end) { 

      break; 

      } 
      sum+= numbers[i]; 
      count++; 
     }  
     // gets average from user input of numbers 
     average = sum/count; 
     System.out.println("Average is: " + average); 
     double max = maxim(numbers); 
     System.out.println("Max: " + max); 
     double min = minim(numbers); 
     System.out.println("Min: " + min); 

    } 

//method for finding out maximum number from user input 

    public static double maxim(double[] array) { 

     double maxNum = array[0]; 
     for(int i = 1; i<array.length; i++) { 
      if(array[i] > maxNum) { 
       maxNum = array[i]; 
      } 
     } 
    return maxNum; 
    } 
//method for finding out minimum number from user input 

    public static double minim(double[] array) { 

     double minNum = array[0]; 
     for(int i = 1; i<array.length; i++) { 
       if(array[i] < minNum && array[i]!=-1) { 
       minNum = array[i]; 
      } 

     } 
    return minNum; 
    } 

} 
+2

Sie keine Array brauchen, das zu tun. Berechne einfach min und max bei jeder Iteration, genau wie du es mit sum und count machst, indem du die neue Zahl mit der vorherigen min/max vergleichst. Wenn Sie es wirklich so behalten möchten, speichern Sie nicht -1 im Array, anstatt zu versuchen, es zu entfernen. Ihre Maxi- und Minimmethoden sollten die Anzahl als Argument nehmen und nur die ersten Elemente des Arrays berücksichtigen. –

Antwort

0

Sie müssen einen Teil des Codes, der für das Lesen von Benutzereingaben verantwortlich ist, aus Code, der Statistiken berechnet, machen. Und um -1 aus dem resultierenden Array zu entfernen, brauchen Sie einfach diesen Wert nicht zu setzen. Wenn Benutzereingabe Zufallszahl zuerst überprüfen, ob es nicht -1 ist, und danach in Ergebnis setzen. So etwas Ähnliches:

import java.util.Scanner; 

public class Average { 

    public static void main(String[]args) { //creating public static main 
     double[] numbers = readInputNumbers(); 
     System.out.println("Average is: " + average(numbers)); 
     System.out.println("Max: " + max(numbers)); 
     System.out.println("Min: " + min(numbers)); 
    } 

    public double[] readInputNumbers() { 
     Scanner input = new Scanner(System.in); //creating scanner input to grab user input 
     System.out.println("Please enter a list of numbers, entering -1 to end the list: "); 
     double[] numbers = new double[20]; 
     final int endInput = -1; 
     for(int i = 0; i < numbers.length; i++) { 
      System.out.print("Enter a number: "); 
      double nextNumber = input.nextDouble(); 
      if(nextNumber == endInput) { 
       break; 
      } else { 
       numbers[i] = nextNumber; 
      } 
     } 
     return numbers; 
    } 

    public static double max(double[] array) { 
     double maxNum = array[0]; 
     for(int i = 1; i<array.length; i++) { 
      if(array[i] > maxNum) { 
       maxNum = array[i]; 
      } 
     } 
    return maxNum; 
    } 

    public static double min(double[] array) { 
     double minNum = array[0]; 
     for(int i = 1; i<array.length; i++) { 
       if(array[i] < minNum && array[i]!=-1) { 
       minNum = array[i]; 
      } 

     } 
    return minNum; 
    } 

    public static double average(double[] numbers) { 
     double sum = 0; 
     for(int i = 0; i < numbers.length; i++) { 
      sum = sum + numbers[i]; 
     } 
     return sum/numbers.length; 
    } 

} 

In jdk seit 8 Version Ihrer hinzufügen diese Aufgabe vereinfachen könnte:

import java.util.Scanner; 
import java.util.stream.*; 

public class Average { 

    public static void main(String[]args) { //creating public static main 
     double[] numbers = readInputNumbers(); 
     DoubleSummaryStatistics statistics = DoubleStream.of(numbers).summaryStatistics(); 
     System.out.println("Average is: " + statistics.getAverage())); 
     System.out.println("Max: " + statistics.getMax()); 
     System.out.println("Min: " + statistics.getMin()); 
    } 

    public double[] readInputNumbers() { 
     Scanner input = new Scanner(System.in); //creating scanner input to grab user input 
     System.out.println("Please enter a list of numbers, entering -1 to end the list: "); 
     double[] numbers = new double[20]; 
     final int endInput = -1; 
     for(int i = 0; i < numbers.length; i++) { 
      System.out.print("Enter a number: "); 
      double nextNumber = input.nextDouble(); 
      if(nextNumber == endInput) { 
       break; 
      } else { 
       numbers[i] = nextNumber; 
      } 
     } 
     return numbers; 
    } 
} 
0

Sie könnten die Eingabe in eine temporäre Variablen nehmen und es in dem Array gespeichert werden, nur wenn es nicht das Ende-Flag (-1) ist. Zum Beispiel:

for(int i = 0; i<numbers.length; i++) { 

    System.out.print("Enter a number: "); 
    double temp = input.nextDouble(); 

    if(temp == end) { 
     break; 
    } 
    numbers[i] = temp; 
    sum += numbers[i]; 
    count++; 
} 
Verwandte Themen