2012-02-20 5 views
0

Я пытаюсь найти ArrayList и найти высочайшую студентку. Значения вводятся случайным образом. Я написал код, который работает , если значения в порядке. Но когда я пытаюсь ввести значения в случайном порядке, цикл всегда возвращает последнее введенное значение! (Это немного меня разочаровывает, поскольку я думал, что это сработало!) Это, наверное, что-то простое, но я снова пропустил это.Возврат самого высокого значения java

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

Вот код:

public String top() 
{ 
    int highest = 0; 
    int k; 

    for (k = 0; k < people.size();k++) 
    { 
     if (people.get(k).getMark() > highest) 
     { 
      highest = k; 
     }  
    } 
    return people.get(highest).getName(); 
} 
+2

домашнее задание? если да, то пометьте его пожалуйста –

ответ

2

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

if (people.get(k).getMark() > people.get(highest).getMark()) 

Вы также можете хранить как самое высокое значение и индекс в двух переменных:

int highestVal = -1; 
    int highestIdx = -1; 

    for (int k = 0; k < people.size(); k++) 
    {  
     if (people.get(k).getMark() > highestVal) 
     { 
      highestVal = people.get(k).getMark(); 
      highestIdx = k; 
     }  
    } 
    return people.get(highestIdx).getName(); 
0

Вместо сравнения с наибольшим в цикле вы должны сравнить с people.get(highest).getMark()

5

Вы устанавливаете highest в индекс ученика с высшей отметкой, а не самой высокой отметкой. Вы, наверное, хотите сохранить как:

public String top() 
{ 
    int highestIndex = 0; 
    int highestMark = people.get(0).getMark(); 

    for (int k = 1; k < people.size(); k++) 
    { 
     int mark = people.get(k).getMark(); 
     if (mark > highestMark) 
     { 
      highestMark = mark; 
      highestIndex = k; 
     }  
    } 
    return people.get(highestIndex).getName(); 
} 

Примечание две другие изменения, которые я сделал:

  • Там нет смысла в объявлении kперед петля; в общем, наиболее частым является дать локальным переменным наименьший объем, который вы можете

  • Я использовал начальные значения от первого лица в коллекции; это теперь будет работать с отрицательными знаками, а также

Отдельно, вы должны думать о том, что вы хотите, чтобы произошло, если people пуст. (В настоящее время код генерирует исключение.)

+0

спасибо вам большое, что сработало :) – user1086245

0

Используйте дополнительную переменную, чтобы удерживать индекс человека.

public String top() 
{ 
    int highest = 0; 
    int k; 
    int topPerson; 

    for (k = 0; k < people.size();k++) 
    { 
     if (people.get(k).getMark() > highest) 
     { 
      highest = people.get(k).getMark() ; 
      topPerson = k; 
     }  
    } 
    return people.get(topPerson).getName(); 
} 
1

Вы сравниваете индексы и значения.

Try:

if (people.get(k).getMark() > people.get(highest).getMark()) 
1

Ты путаешь, что представляют ваши переменные. Вы сравниваете знаки indivduals с «highst», но тогда вы устанавливаете максимально высокий показатель для этого человека (k).

Итак, вы сравниваете индексы с отметками ...

1

highest является индексом, вы сравниваете знак с индексом отметки

if (people.get(k).getMark() > highest) 
0

попробовать это один :)

public String top() 
    { 
     int highest = 0; 
     int k; 

     for (k = 1; k < people.size();k++) 
     { 
      if (people.get(k).getMark() > people.get(highest).getMark()) 
      { 
       highest = k; 
      }  
     } 
     return people.get(highest).getName(); 
    }