2015-11-29 2 views
0

Я пытаюсь заставить это работать, поэтому, когда пользователь вводит числа, он, в свою очередь, выводит значения max, min, sum и avg этих чисел. Первое число - количество введенных чисел. Я должен вызывать методы для каждого вычисления и использовать основной метод для печати. Когда я вхожу, чтобы ввести что-то, чтобы просто распечатать 0,00, а не фактический min, max, sum и avg. Он печатает 0,00, равный первому номеру, на который он не должен делать. Любая помощь будет оценена по достоинству.Калькулятор и использование массивов

Sample Input 
    5 1.0 2.0 3.0 4.0 5.0 

Sample Output 
    15.00 3.00 1.00 5.00 

Мой текущий код

import java.util.Arrays; 
import java.util.Scanner; 

public class ManyNumbers { 

public static void main(String args[]) { 

    double i,n; 
    Scanner input = new Scanner(System.in); 
    while(input.hasNext()){ 
    n=input.nextInt(); 
    double a[] = new double [(int) n]; 

    for(i=0;i<n;i++){ 
     a[(int) i] = input.nextDouble(); 
     double max1 = max (a); 
     double min1 = min (a); 
     double sum1 = sum (a); 
     double avg= sum1/n; 
     System.out.printf("%10.2f",min1, max1, sum1, avg);} 
    } 
} 
     private static double sum(double[] array){ 
     double sum = 0; 
     for (double e : a) sum += e; 
     return sum;} 

     private static double min(double[] a){ 
     Arrays.sort(a); 
     double min =a[0]; 
     return min;} 

     private static double max(double[] a){ 
     Arrays.sort(a); 
     double max= a[a.length -1];{ 
     return max;} 
    } 
} 
+1

Ваши методы не приседают. Вы не используете параметры массива ... –

+1

Кроме того, ваши скобки выглядят неправильно. Как работает этот код? –

+0

Вы устанавливаете n в 0 и затем создаете двойной массив размера n (который равен 0). Поэтому ссылка на [все] вызовет исключение, потому что массив равен 0. –

ответ

1

Я пытался читать, но отступы действительно странно, пытался отступа его:

EDIT: Хорошо, так что я сделал отступы, проблема кажется, что вы установите N в 0, затем создайте массив размером n (который равен 0). Вы сделали это в 3-х методах.

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

     double i,n; 
     Scanner input = new Scanner(System.in); 
     while(input.hasNext()){ 
      n=input.nextInt(); 
      double a[] = new double [(int) n]; 

      for(i=0;i<n;i++){ 
       a[(int) i] = input.nextDouble(); 
       double max1 = max (a); 
       double min1 = min (a); 
       double sum1 = sum (a); 
       double avg= sum1/n; 
       System.out.printf("%10.2f",min1, max1, sum1, avg); 
      } 
     } 
    } 
    private static double sum(double[] array){ 
     double sum = 0; 
     double i,n = 0; //N is zero 
     double a[] = new double [(int) n];//Creating an array of size n(0) 


     for (double e : a) 
      sum += e; 
     return sum; 
    } 

    private static double min(double[] array){ 
     double i,n = 0; //N is zero 
     double a[] = new double [(int) n]; //Creating array of size N 
     Arrays.sort(a); 
     double min =a[0]; 
     return min; 
    } 

    private static double max(double[] array){ 
     double i,n = 0; // N is zero 
     double a[] = new double [(int) n]; //Creating array of size 0 
     Arrays.sort(a); 
     double max= a[a.length -1]; 

     {//Why? 
      return max; 
     } 
    } 
} 

EDIT2: Я думаю, что, возможно, вы нашли свою проблему. Похоже, вы думали, что n от main() был глобальным. Затем вы определили другую локальную переменную для каждого метода с тем же именем, что заставило вас думать, что это та же самая переменная, которой она не была. Я бы разместил правильный способ сделать это, но у меня нет времени, извините.

+0

Вы должны опубликовать что-то, что на самом деле работает – WIR3D

+0

Просто убрали строки, которые назначили n значение 0, и теперь его прекратила давать мне ошибку. Теперь он печатает, но он дает только 0.00 каждый раз, а не фактические расчетные числа. –

0

Существует определенно ряд проблем с кодом, но мне кажется, что первая инициализация двойного массива a не должна быть объявлена ​​каждый раз при запуске цикла. Вы не добавляете все входные данные пользователя в один массив, а создаете новые массивы каждый раз, когда пользователь вводит ввод. Вам нужно написать код, чтобы узнать, сколько цифр пользователь вводит или жестко кодирует, прежде чем объявлять двойной массив. Что-то вроде этого:

Scanner input = new Scanner(System.in); 
System.out.println("Please enter the number of doubles to add to the array"); 
n=input.nextInt(); 
double a[] = new double [(int)n]; 

Это только позаботится о вашей первой проблеме. Я бы также использовал цикл for со счетчиком, чтобы добавить к нему парные числа. Эти методы тоже нужны, но, надеюсь, вы начнете. Удачи!

2

Вот исправленная версия: Итак, я исправил ваш вход, чтобы он мог меняться и исправлял ваши методы.

import java.util.Arrays; 
import java.util.Scanner; 

public class ManyNumbers { 
    public static void main(String[] args) { 
     Scanner in = new Scanner(System.in); 
     int arraysize = in.nextInt(); 
     Double[] array = new Double[arraysize]; 
     for (int i = 0; i < arraysize; i++) { 
      array[i] = in.nextDouble(); 
     } 
     System.out.println(sum(array) + " " + min(array) + " " + max(array)); 
    } 

    private static double sum(Double[] array) { 
     double sum = 0; 
     double i = 0; 
     Double a[] = new Double[array.length]; 
     a = array; 

     for (double e : a) 
      sum += e; 
     return sum; 
    } 

    private static double min(Double[] array) { 
     Double a[] = new Double[array.length]; 
     a = array; 
     Arrays.sort(a); 
     double min = a[0]; 
     return min; 
    } 

    private static double max(Double[] array) { 
     Arrays.sort(array); 
     double max = array[array.length - 1]; 
     return max; 
    } 
} 
0

Это окончательный код, который работал с форматированием, которое требовалось от него.

import java.util.Arrays; 
import java.util.Scanner; 

public class ManyNumbers { 
public static void main(String[] args) { 
    Scanner in = new Scanner(System.in); 
    while(in.hasNext()){ 
    int arraysize = in.nextInt(); 
    Double[] array = new Double[arraysize]; 
    for (int i = 0; i < arraysize; i++) { 
     array[i] = in.nextDouble(); 
    } 
    double sum1 = sum(array); 
    double max1 = max(array); 
    double min1 = min(array); 
    double avg= sum1/arraysize; 
    System.out.printf("%10.2f",sum1); 
    System.out.printf("%10.2f",avg); 
    System.out.printf("%10.2f",min1); 
    System.out.printf("%10.2f",max1); 
    System.out.println();} 
} 

private static double sum(Double[] array) { 
    double sum = 0; 
    double i = 0; // N is zero 
    Double a[] = new Double[array.length]; 
    a = array; 

    for (double e : a) 
     sum += e; 
    return sum; 
} 

private static double min(Double[] array) { 
    Double a[] = new Double[array.length]; 
    a = array; 
    Arrays.sort(a); 
    double min = a[0]; 
    return min; 
} 

private static double max(Double[] array) { 
    Arrays.sort(array); 
    double max = array[array.length - 1]; 
    return max; 
} 
} 
Смежные вопросы