简体   繁体   中英

Number Analysis Program

I am in a beginner Java class and just learning the concept of arrays. We have to use comments to denote the code.

I am trying to make a program that asks the user to enter 20 numbers, stores them in an array and then calculates and displays: the lowest number, the highest number, the total of the numbers and the average of the numbers.

I have a ton of errors when running it through jGrasp and am unsure how to fix them.

Any advice?

public class NumberAnalysisProgram
{
  public static void main (String[] args)
  {


  Scanner input = new Scanner (System.in);

  //A constant for the array size
  final int SIZE = 20;

  //Declare an array to hold the numbers entered by the user
  int[] numbers = new int[SIZE];

  //Declare variables to hold the lowest and highest
  int lowest = numbers[0];
  int highest = numbers[0];

  //Declare variable to hold the total
  int sum;

  //Declare a variable to hold the average
  double average;

  //Declare a counting variable to use in the loops
  int index = 0;

  //Explain the program
  System.out.println("This program gets a list of 20 numbers. Then displays:");
  System.out.println(" the lowest number, the highest number, the total of the numbers,     
  and the average.");

  //Get the numbers from the user
  for (int i = 0; i< numbers.length; i++)
  {
  System.out.print("Please enter 20 numbers, each seperated by a space:  ");
  numbers[i] = input.nextInt();
  }


  //Call a method to calculate the lowest and highest numbers
  getLowHigh(numbers);

  //Display the lowest and highest numbers
  System.out.println("The lowest number is:  " + lowest);
  System.out.println("The highest number is:  " + highest);



  //Call a method to calculate the total of the numbers
  sum = getTotal(numbers);

  //Display the sum/total of the numbers
  System.out.println("The total of these numbers are:  " + sum);



  //Call a method to calculate the average of the numbers
  average = getAverage(sum, numbers);

  //Display the average of the numbers
  System.out.println("The average of these numbers are:  " + average);

 }


  //Method getLowHigh
  public static int getLowest(int[] array)
  {
     for(int i=1; i< numbers.length; i++)
     {
          if(numbers[i] > highest)
          highest = numbers[i];
       else if (numbers[i] < lowest)
       lowest = numbers [i];
     }

     return highest;
     return lowest;   
  }

  //Method getTotal
  public static int getTotal(int[] array)
  {

  //Loop counter variable
  int index;

  //Accumulator variable initialized to 0
  int total = 0;

  //Pull in the numbers from the main method to calculate the total
  for(index = 0; index < numbers.length; index++)
  {
     total = total + number[index];
  }

     return total;  
  }

  //Method getAverage
  public static int getAverage(int[] array)
  {

     //Loop counter variable
     int index;


     //Pull in the sum and the numbers from the main method to calculate the average
     for(index = 0; index < numbers.length; index++)
     {
        average = sum / number[index];
     }

     return average;  
   }
}

The first problem I can see is that in all of the methods, you never used the arguments. You used a different array, which doesn't exist within those methods.

The second problem is that you're trying to return two values from one method. You can only return one value from a method. So you have to get rid of " return highest; " and make a copy of the method in which there is no " return lowest; ", and use each where needed.

The third thing I see (although it isn't causing any errors) is that you could shorten the code by saying

int total = 0;

for(int index = 0; index < numbers.length; index++)
{
   total += number[index];
}

instead of

int index;

int total = 0;

for(index = 0; index < numbers.length; index++)
{
   total = total + number[index];
}

For starters, the below code is trying to initialize variables to array values that don't exist… These should be removed entirely.

//Declare variables to hold the lowest and highest
  int lowest = numbers[0];
  int highest = numbers[0];

There will also be an error with these in the code below because you're not passing them to the function therefore it doesn't exist within this scope. public static int getLowest(int[] array) { for(int i=1; i< numbers.length; i++) { if(numbers[i] > highest) highest = numbers[i]; else if (numbers[i] < lowest) lowest = numbers [i]; }

     return highest;
     return lowest;   
  }

You are also supplying 2 parameters for a function that only calls for one. See below:

//Call a method to calculate the average of the numbers
  average = getAverage(sum, numbers);

public static int getLowest(int[] array)
  {
     for(int i=1; i< numbers.length; i++)
     {
          if(numbers[i] > highest)
          highest = numbers[i];
       else if (numbers[i] < lowest)
       lowest = numbers [i];
     }

     return highest;
     return lowest;   
  }

I think that this is more clean:

public class Main {
    public static final int SIZE = 20;

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        List<Integer> numbers = new ArrayList<Integer>();

        Double total = 0d;

        System.out.println("This program gets a list of 20 numbers. Then displays:");
        System.out.println(" the lowest number, the highest number, the total of the numbers, and the average.");

        // Get the numbers from the user
        System.out.print("Please enter 20 numbers, each seperated by a space:  ");
        for (int i = 0; i < SIZE; i++) {
            Integer currInput = input.nextInt();
            numbers.add(currInput);
            total += currInput;
        }

        System.out.println("The lowest number is:  " + Collections.min(numbers));
        System.out.println("The highest number is:  " + Collections.max(numbers));
        System.out.println("The total of these numbers are:  " + total);
        System.out.println("The average of these numbers are:  " + (total / SIZE));

    }
}

Hope it helps :]

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM