2015-09-09 2 views
1

У меня проблема, которую я не могу решить. Я пытаюсь создать метод, в котором я хочу вернуть int-массив с индексами в отсортированном порядке для 3 первых чисел в таблице «a». Например, если у меня есть a, содержащий {8,9,4}, я хотел бы вернуть {2,0,1}. Это потому, что 2 - индекс наименьшего числа, 0 - индекс для наименьшего числа, а 1 - индекс для самого большого из трех. Другой пример: a = {2,6,3}, тогда возвращаемое значение будет {0,2,1}.Получение правильного значения индекса для массива

Я также создал метод, но я просто не могу заставить его работать.

также: Indeks = индекс

public static int[] indeks(int[] a) 
{ 
    int[] indeks = { 0, 1, 2 }; 

     if(a[1] < a[0]) 
     { 
     int temp = indeks[0]; 
     indeks[0] = indeks[1]; 
     indeks[1] = temp; 
     } 
     if(a[2] < a[0]) 
     { 
     int temp = indeks[0]; 
     indeks[0] = indeks[2]; 
     indeks[2] = temp;  
     } 
     if(a[2] < a[1]) 
     { 
     int temp = indeks[1]; 
     indeks[1] = indeks[2]; 
     indeks[2] = temp; 
     } 


    return indeks; 
} 

Любые предложения?

+0

Предложение 1) Добавить тег языка на ваш вопрос. – csmckelvey

+1

На каком языке? У большинства будет возможность получить максимальное значение с помощью индекса. Таким образом, вы можете разделить массив каждый раз, когда у вас есть элемент max и его индекс. –

+0

Во-первых, есть поговорка «Не повторяй себя». Ваш код подкачки повторяется и является основным кандидатом, который можно вытащить в новую функцию. Во-вторых, помните, что когда вы меняете элементы 'indeks', вы не меняете соответствующие элементы' a', поэтому они выходят из строя. – Davislor

ответ

0

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

Игра будет играть между двумя номерами, а число, которое больше, выигрывает игру, а его счет увеличивается.

Первоначально все 3 числа имеют балл = 0.

Естественно будет три игры играют.

Наибольшее число будет тем, чей счет 2 (больше 2). Наименьшее число будет тем, чей счет равен 0 (больше, чем ни одному), а середина будет равна 1 (больше чем только 1).

Теперь самая важная часть заполнения массива индекс, который очень легко, но все равно я буду объяснять it.The результаты сами говорят, в каком положении они должны идти на операции

score[i]%3; 

и индекс будет заполнен как

index[score[i]%3]=i; 

Например, если оценка [1] равна 2, тогда результат будет равен 2, а индекс [2] = 1.

Так держать это в виду, эта функция может быть записана в виде:

public static int[] indeks(int[] a) 
{ 
int []score=new int[3]; 
int []index=new int[3]; 
score[0]=0;score[1]=0;score[2]=0; 
//game b/w a[0] and a[1] 
if(a[0]>a[1]) 
    score[0]++; 
else score[1]++; 
//game b/w a[1] and a[2] 
if(a[1]>a[2]) 
    score[1]++; 
else score[2]++; 
//game b/w a[0] and a[2] 
if(a[0]>a[2]) 
    score[0]++; 
else score[2]++; 
//fill the index array 
index[score[0]%3]=0; 
index[score[1]%3]=1; 
index[score[2]%3]=2;  
} 
+0

Эта задача предназначена для задания, и в задании говорится, что это должно быть возможно сделать только с тремя сравнениями, что я не могу получить на работу .... – ssandoy

+0

@ssandoy Ок, не проблема, это довольно легко. –

+0

@ssandoy Надеюсь, теперь дело сделано. –

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