#java #arrays #average
#java #массивы #среднее
Вопрос:
Итак, я пытаюсь вычислить среднее значение и сумму массива, однако мне нужно удалить самые высокие и самые низкие значения, прежде чем я смогу вычислить среднее значение / сумму.
У меня есть код для заполнения массива случайными удвоениями, а затем нахождения самого высокого и самого низкого значения.
В чем я не уверен, так это в том, есть ли способ вычесть самые высокие и самые низкие значения или мне нужно скопировать данные из массива в новый за вычетом самых высоких и самых низких значений, а затем вычислить среднее значение / сумму.
Это то, что у меня есть до сих пор. Простите меня, если это несколько очевидно, но я в тупике и все еще нахожусь во введении к курсу Java.
Вот мой код на данный момент.
double [] contestantOne = new double[8];
for (int index=0; index < contestantOne.length; index ) {
contestantOne [index] = (double) (Math.random()*9) 1;
}
for (int index=0; index < contestantOne.length; index ) {
System.out.println( contestantOne [index] "n");
}
double contestantOneHigh; contestantOneHigh = contestantOne[0];
for (int index=1; index <contestantOne.length; index ) {
if (contestantOne[index] > contestantOneHigh)
contestantOneHigh = contestantOne[index];
}
System.out.print("The highest value in your array is"
" " contestantOneHigh);
System.out.println();
System.out.println();
double contestantOneLow; contestantOneLow = contestantOne[0];
for (int index=1; index<contestantOne.length; index ) {
if (contestantOne [index] < contestantOneLow)
contestantOneLow = contestantOne[index];
}
System.out.print("The lowest value in your array is"
" " contestantOneLow);
System.out.println();
System.out.println();
Комментарии:
1. Чтобы отформатировать свой код, вставьте его в редактор, выберите, если все, и используйте
{}
кнопку, чтобы превратить его в блок кода. И посмотрите на предварительный просмотр перед отправкой.2. пожалуйста, не пишите так много syso println, напишите в своем одном syso » n n» для разрывов строк… И ваш цикл for не завершен (for (int index=1; index ….? )
3. Да,
print/println
s являются избыточными. Нет необходимости помещать пробел в качестве дополнительной строки. По крайней мере, вы должны сделать S.o.p. a println и иметь только один дополнительный пустой, лучше было бы, как говорит Martinl, добавить » n n» в конце, но лучше всего было бы сделать этоprintf
s:S.o.pf("message %f%n%n", value);
.
Ответ №1:
Вычислите сумму, как обычно, но сохраните переменную для каждого минимального и максимального значений, вычтя их в конце:
double min, max, sum;
min = max = sum = list[0]; // May want to add a check to make sure length > 1
for(int i = 1; i < list.length; i ) {
double thisValue = list[i];
sum = thisValue;
min = Math.min(min, thisValue);
max = Math.max(max, thisValue);
}
sum -= min max;
double avg = sum / (list.length - 2);
Конечно, вам может потребоваться настроить точные методы в соответствии с используемым классом.
Комментарии:
1. Почти то же самое с some
List
вместо array иCollections.min
/Collections.max
: ideone.com/4EJjr
Ответ №2:
Я не понимаю, почему вам нужно удалить высокое и низкое значение из массива, чтобы получить среднее? Среднее значение должно быть суммой всех значений, деленной на общее количество значений:
double sum = 0;
for (int index=0; index < contestantOne.length; index )
{
//If you really need to remove highest and lowest value
if (contestantOne[index] != contestantOneLow amp;amp; contestantOne[index] != contestantOneHigh)
sum = contestantOne[i];
}
double avg = sum / (double)(contestantOne.length - 2);
Проблема с удалением значений, как сделано выше, заключается в том, что максимумы и минимумы вашего массива не уникальны (array[10, 13, 15, 3, 15, 3, 6] 15 = Высокий, 3 = Низкий), тогда ваше среднее значение будет неверным при его вычислении, потому что оно будет игнорировать как 15, так и 3 секунды.
Я бы предложил сохранить индекс высокого и индекс низкого и использовать его вместо этого.
Комментарии:
1. Спасибо, у меня это сработало. Мне нужно было удалить самые высокие и самые низкие значения, потому что случайные удвоения являются «оценками судей» и предназначены для программы для определения победителя конкурса.
Ответ №3:
снова пройдитесь по массиву, проверяя, равен ли каждый элемент contestantOneLow / High , если он не добавляется к count, когда вы закончите, разделите это на contestantOne .длина — 2 или просто contestantOne.длина. это должно дать вам ваше среднее значение.
Ответ №4:
Arrays.sort(a);
find sum of array a
sum -= a[0] a[a.length - 1]
return sum / (a.length - 2)
Ответ №5:
если вы собираетесь вычислить среднее значение массива значений, и вы не знаете, будут ли в нем нули. Я использовал:
int[] arrayDays = new int[] {monday,tuesday,wednesday,thursday,friday,saturday,sunday};
int totalValue = 0;
int divide = 0;
for (int i=0;i<arrayDays.length;i ){
if (arrayDays[i] != 0){
totalValue = totalValue arrayDays[i];
divide = divide 1;
}
}
Float average = 0f;
if (divide!=0){
average = Float.valueOf(totalValue / divide);
}
Ответ №6:
Почему бы вам не использовать набор деревьев вместо массива? Таким образом, элементы будут отсортированы, и вы сможете удалить более высокие и самые низкие элементы со сложностью O (1) вместо того, чтобы просматривать весь массив.
Вам нужно будет только просмотреть коллекцию, чтобы получить сумму, и это все. Вся ваша программа будет запущена за время O (logn) O (n).
public static void main(String[] args) {
TreeSet<Double> contestantOne = new TreeSet<>();
for (int index=0; index < 8; index ) {
contestantOne.add((double) (Math.random()*9) 1);
}
Iterator<Double> iterator = contestantOne.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
double contestantOneHigh = contestantOne.pollLast();
System.out.print("The highest value in your array is"
" " contestantOneHigh);
double contestantOneLow = contestantOne.pollFirst();
System.out.println("The lowest value in your array is"
" " contestantOneLow);
double sum = 0.0;
iterator = contestantOne.iterator();
while(iterator.hasNext()){
sum = iterator.next();
}
System.out.println("The sum excluding first and last is: " sum);
System.out.println("The average excluding first and last is: " sum/contestantOne.size());
}