2016-12-07 4 views
1

Я пытаюсь решить this вопрос:Как найти индекс элемента в массиве?

String[] names = { 
"Elena", "Thomas", "Hamilton", "Suzie", "Phil", "Matt", "Alex", 
"Emma", "John", "James", "Jane", "Emily", "Daniel", "Neda", 
"Aaron", "Kate" 
}; 

int[] times = { 
341, 273, 278, 329, 445, 402, 388, 275, 243, 334, 412, 393, 299, 
343, 317, 265 
}; 

в основном есть 2 массивов, один для имен и один для времени, индексы массива соответствия (для времени примера Елены является 341), я должен найти самого быстрого бегуна, поэтому тот, кто имеет наименьшее время, является самым быстрым.

Сначала я нашел наименьшее значение во временном массиве.

for (int i = 0; i < array.length; i++) { 
    if(times[i] < fastest) 
     fastest = times[i]; 
} 

, но я не знаю, как соответствовать имена массив раз массив, я попытался это, но он не работает

System.out.println(Arrays.asList(names).indexOf(fastest)); 
+1

Почему бы не просто отслеживать индекс и использовать его, когда вам цикл? – DeeV

+0

использовать 'HashMap' вместо этого? –

+1

попытался положить 'System.out.println (имена [i]);' in for loop, в этом случае последний вывод был бы самым быстрым, но я просто хочу только 1 вывод –

ответ

4

Как насчет:

public class test { 


public static void main(String[] args) 
{ 

    String[] names = { 
      "Elena", "Thomas", "Hamilton", "Suzie", "Phil", "Matt", "Alex", 
      "Emma", "John", "James", "Jane", "Emily", "Daniel", "Neda", 
      "Aaron", "Kate" 
      }; 

      int[] times = { 
      341, 273, 278, 329, 445, 402, 388, 275, 243, 334, 412, 393, 299, 
      343, 317, 265 
      }; 

      int fastest = Integer.MAX_VALUE; 
    int slowestRunnner = 0; 

      for (int i = 0; i < times.length; i++) { 
       if(times[i] < fastest) 
       { 
        fastest = times[i]; 
        slowestRunnner = i; 
       } 
      } 

      System.out.println(names[slowestRunnner]); 
} 
} 

System.out.println(names[slowestRunner]); 
+0

спасибо за ответ, он сработал, int slowestRunnner', я не установил его в ноль и не получил ошибку, можете ли вы объяснить, почему я должен установить его на любое целое заранее? –

+0

Возможно, у меня просто есть мозговой пердит, но приведенный выше код всегда даст вам i = array.length -1, потому что у вас нет скобок вокруг оператора if, поэтому только самое быстрое = раз [i] будет выполняться для if и slowestRunner = i получает каждую итерацию цикла ...? –

+0

Локальная переменная должна быть явно задана значением до ее использования посредством инициализации или назначения таким образом, который может быть проверен компилятором с использованием правил для определенного назначения. – nitinsh99

1
int minimum = 0; 
for(int i = 1; i < times.length; i++){ 
    if(times[minimum] > times[i]){ 
     minimum = i; 
    } 
} 
System.out.println(names[minimum]); 

это должно сделать работу

0

назовите этот метод array_variable [index]

int index = 0; 
for (int i = 0; i < array.length; i++) { 
if(times[i] < fastest){ 
    fastest = times[i]; 
    index = i; 
} 
} 
System.out.println(names[index]); 
0

Самый простой способ для этого случая:

int index = 0; 
for (int i = 0; i < array.length; i++) { 
    if(times[i] < fastest) { 
     fastest = times[i]; 
     index = i; 
    } 
} 
System.out.println(names[index]); 

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

1

Не могли бы вы сделать:

var fastest = ''; 
var fastestIndex = ''; 

for (int i = 0; i < array.length; i++) { 
    if(times[i] < fastest) 
     fastest = times[i]; 
     fastestIndex = i; 
} 

Затем используйте:

names[fastestIndex] 

получить имя?

0

Просто используйте поле для отслеживания индекса как:

int indexOfFastest = 0; 
int fastest = Integer.MAX_VALUE; // this initialization makes sure first element is assigned to fastest within the iteration 
for (int i = 0; i < array.length; i++) { 
    if(times[i] < fastest) { 
     fastest = times[i]; 
     indexOfFastest = i; 
    } 
} 

и дополнительно изменить существующий код, как

System.out.println(Arrays.asList(names).get(indexOfFastest)); 

Редактировать - Поскольку код с преобразованием в List концами выполняющий ту же оценку, что и получение значений элемента массива по индексу. Пожалуйста, используйте

System.out.println(names[indexOfFastest]); 

вместо этого для лучшей практики.

+1

Скорее 'names [indexOfFastest]' чем 'Arrays.asList (имена) .get (indexOfFastest)' – Dukeling

+0

@Dukeling уверен. пожалуйста, бросьте какой-нибудь свет на * почему? * – nullpointer

+1

Думаю, я мог бы что-то сказать о написании большего количества кода, который вызывает 2 метода и строит класс, и в конечном итоге просто заканчивает тем же кодом, что и первый, но, я думаю, это скорее всего, проблема с лучшей практикой. – Dukeling

0

Он работал для меня

int fastest=0; 
     for (int i = 1; i < times.length; i++) { 
      if(times[i] < times[fastest]) 
       fastest = i;} 
     System.out.println("Fastest runner is "+names[fastest]); 
Смежные вопросы