2014-11-12 3 views
0

Как подсчитать количество элементов в массиве?Как подсчитать количество элементов, добавленных в массив, и найти среднее число чисел, добавленных в Java?

Таким образом, массив может содержать 10 элементов, но не все заполняются. Как подсчитать количество введенных элементов?

Также, как правильно найти среднее значение массива? То, что я теперь дает мне это,

Количество действующих марок, введенных в 10 [D @ 7ea987ac [D @ 7ea987acAverage: 0,0

//validate strings entered by user   
    if(convertedInput >= 0 && convertedInput <=100){ 
     ValidArray[validArraycount] = convertedInput; 
     validArraycount ++; 
    } 
    }  
    catch(NumberFormatException e){ 
    } 

    //Prints number of valid values entered 
     System.out.println("The number of valid grades entered is " + vArrayLen); 



    //for printing array backwards 
    for (int i = (arraycount-1); i>=0; i--){ 
     System.out.print(ValidArray); 

    } 
    //calculates sum of all values in array of ValidArray (of grades) 
    for(double d : ValidArray){ 
     sum += d; 
    } 

     //avergae of valid number array 
    double average = (sum/ValidArray.length); 

    System.out.println("Average: " + average); 
    } 
} 

Спасибо.

EDIT: Вход должен содержать до 10 строк. Все может быть введено. Допустимые строки - это двойные числа между 0-10, которые могут быть 0 и 10. Все строки недействительны, отбрасываются. В настоящее время это то, что мой код выглядит следующим образом:

import java.util.*; 
public class Grades{ 
    public static void main(String args[]){ 

    int arraycount = 0; 
    final int SIZE = 100; 
    int validArrayCount = 0; 
    final int ValidArraySize = 100; 
    int valuesinValidArray = 0; 


    Scanner reader = new Scanner(System.in); 
    String initialInput = new String (""); 

    String [] sArray = new String[SIZE]; 
    double [] ValidArray = new double[ValidArraySize]; 

    double sum = 0; 

    boolean exit = false; 

    System.out.println("You may enter up to 100 grades."); 
    System.out.println("When you are done entering grades, press the enter/return key."); 


    //Prints to user. Stops if nothing is entered. 
    while((arraycount < SIZE)&&(exit == false)){ 
    System.out.println("Enter line " + (arraycount+1) + ": "); 
    initialInput = reader.nextLine(); 


    if (initialInput.length()<1){ 
     exit = true; 
    } 
    else{ 
     sArray[arraycount]=initialInput; 
     arraycount++; 
    } 
    } 

    //convert string to double 
    try{ 
    double convertedInput = Double.parseDouble(initialInput); 

    //validate strings entered by user   
    if(convertedInput >= 0 && convertedInput <=100){ 
     ValidArray[validArrayCount] = convertedInput; 
     validArrayCount ++; 
    } 
    } 
    catch(NumberFormatException e){ 
    } 
    //Prints number of valid values entered 
     System.out.println("The number of valid grades entered is " + vArrayLen); 



    //for printing array backwards 
    for (int i = (ValidArraySize-1); i>=0; i--){ 
     System.out.println(ValidArray[i] + ""); 
    } 

    //calculates sum of all values in array of ValidArray (of grades) 
    for(double d : ValidArray){ 
     sum += d; 
    } 

     //avergae of valid number array 
    double average = (sum/validArrayCount); 

    System.out.println("Average: " + average); 
    } 
} 
+0

«Таким образом, массив может содержать 10 элементов, но не все заполняются. Как подсчитать количество введенных элементов? »Определите переменную и отслеживайте счет самостоятельно. (На самом деле, похоже, что у вас уже есть переменная, содержащая счет. Используйте это.) Это почти единственный способ , если вы не используете ['ArrayList'] (http://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html). – ajb

+0

Массивы Java не являются динамическими, как только вы их инициализируете они имеют фиксированную длину. Можете ли вы использовать коллекцию типа 'ArrayList'? Также вы уверены, что включили все свои требования (кажется, вы делаете ряд других вещей)? –

+0

' double [] 'будет есть каждая запись, инициализированная до нуля по умолчанию. –

ответ

0

Вы уже делаете это, также ValidArray это страшное название. Вы забыли использовать индекс массива в вашем for цикле и номер, который вы используете для этого является validArraycount -

// Prints number of valid values entered 
System.out.println("The number of valid grades entered is " 
     + validArraycount); 

// for printing array backwards 
for (int i = validArraycount-1; i>=0; i--){ 
    System.out.print(ValidArray[i] + " "); // <-- don't forget the index. 
} 
System.out.println(); // <-- next line. 
double sum = 0; 
// sum the values in array of ValidArray (of grades) 
for(double d : ValidArray){ 
    sum += d; 
} 
// Average. Sum/the count 
double average = (sum/validArraycount); 
System.out.println("Average: " + average); 
+0

Не будет ли индекс печатать только это число. Я не хочу этого делать. Я хочу напечатать весь массив только в обратном порядке. –

+0

@KaraWilliam Это петля, которая будет печатать каждое число с e end и пробел. После цикла должно быть 'println()' (я отредактирую его). Наконец, я предлагаю вам попробовать. –

+0

Я пробовал это, и массив не печатает. –

0

validArrayCount уже содержит число элементов, которые вводятся.

Вместо печати vArrayLen для числа допустимых классов Введенный, распечатайте validArrayCount:

System.out.println("The number of valid grades entered is " + validArrayCount); 

Чтобы получить среднее, можно разделить на validArrayCount вместо ValidArray.length:

double average = (sum/validArrayCount); 

Кроме того, вам необходимо добавить индексы массива при печати массива назад:

// for printing array backwards 
for (int i = validArrayCount-1; i>=0; i--){ 
    System.out.print(ValidArray[i] + " "); 
} 
System.out.println(); //For inserting a new line after printing all array elements 
Смежные вопросы