2013-09-17 2 views
3

Мне нужно найти самое низкое значение в массиве, но я хочу знать, как обрабатывать несколько результатов. Скажем, мой массив содержит [1,4,7,5,3,1] - мой результат должен быть 1,1. Есть идеи?Самые низкие значения массива, если несколько результатов

double minimum = array1[0]; //sets the first to be the smallest 
for (int i = 0; i < array1.length; i++) //goes through your array 
{ 
if (array1[i] < array1[0]) //checks and replaces if necessary 
{ 
    minimum = array[i]; 

} 
} 

System.out.println(minimum); //returns the value of the smallest 
+1

Как насчет сохранить счетчик для того, как много вхождений этого минимума вы 'видел? Кроме того, имейте в виду, что прямое сравнение «двойных» значений для равенства редко является хорошей идеей. Возможно, вам нужен какой-то уровень допуска. Вы действительно хотите * использовать 'double', а не' int'? –

+0

Сортировка массива; итерация с начала до тех пор, пока значение текущего элемента не будет таким же, как предыдущее значение. – Maggie

+0

Скажите, что мне нужно было получить индекс минимальных значений? Вместо того, чтобы просто подсчитывать количество самых низких значений, я хочу хранить их индексы в массиве? – tattykeeran

ответ

1

у вас есть небольшая ошибка в вашем коде, вам следует сравнить текущее значение до минимума, а не к первому значению

double minimum = array1[0]; //sets the first to be the smallest 
var minValueCounter = 0; 
for (int i = 0; i < array1.length; i++) //goes through your array 
{ 
if (array1[i] < minimum) //checks and replaces if necessary 
{ 
    minimum = array[i]; 
    minValueCounter = 1; 

} 
else if (array1[i] == minimum) //checks and replaces if necessary 
{ 
    minValueCounter++; 

} 
} 
0

Держите другую переменную для подсчета дубликатов. Если вы найдете значения, равные текущему минимальному значению, увеличьте это количество. Не забудьте сбросить счет каждый раз, когда минимальные изменения.

1

Одна вещь может быть «Сортировка» ваш массив в порядке возрастания & то отображаемые значения с самого начала, пока они не равны

0

Как об использовании Collections.sort()

Я предполагаю ваш array1[] имеет double тип

double array1[] = new double[] { 1, 4, 7, 5, 3, 1 }; 
ArrayList<Double> al = new ArrayList<Double>(); 
for (int i = 0; i < array1.length; i++) 
    al.add(array1[i]); 
Collections.sort(al); 
System.out.println(al.toString()); 

Out говоря:

[1.0, 1.0, 3.0, 4.0, 5.0, 7.0] 

Для печати Все Равные Наименьшие значения используйте

for (int i = 0; i < (al.size() - 1); i++) { // why (al.size() - 1), Its better if try to learn yourself 
    if (Double.compare(al.get(i), al.get(i+1))==0) 
     System.out.print(""+al.get(i) + "," + al.get(i + 1)); 
    else 
     break; 
} 

Выход:

1.0,1.0 
1
Arrays.sort(array1); 
ArrayList<Integer> smallestValues = new ArrayList<Integer>(); 
smallestValues.add(array1[0]); 
int i=1; 
while (i<array1.length && (array1[i] == array1[i-1])) { 
    smallestValues.add(array1[i]); 
    i++; 
} 
0

Я хотел бы сделать это таким образом

int[] a = { 1, 4, 7, 5, 3, 1 }; 
    Arrays.sort(a); 
    int n = 1; 
    for (int i = 1; i < a.length && a[i] == a[0]; i++) 
     n++; 
    int[] res = Arrays.copyOf(a, n); 
0

Просто для удовольствия, решение без цикл:

Integer[] inputA = new Integer[]{1,4,7,5,3,1}; 
    List<Integer> inputL = Arrays.asList(inputA);   

    Collections.sort(inputL); 

    int last = Collections.frequency(inputL, Collections.min(inputL)); 

    inputA = Arrays.copyOfRange(inputL.toArray(new Integer[inputL.size()]), 0, last); 

    System.out.println(Arrays.deepToString(inputA)); 

выходы:

[1, 1] 

г Elevant методы apidoc (все статические):

Смежные вопросы