Сравнивая переменные объектов в массиве? - PullRequest
0 голосов
/ 17 июля 2011

У меня есть массив объектов на Java.Скажем, эти объекты Obj содержат переменную var, и у меня есть несколько Obj, хранящихся в массиве Array [].

Я хотел бы сравнить var между двумя соседними объектами Obj, но я не знаю, как и не могуЯ нахожу любую информацию в Интернете (что заставляет меня думать, что я неправильно формулирую свой вопрос, или это не выполнимо или что-то в этом роде)

Редактировать:

В настоящее время я пытаюсь использовать довольно окольный метод назначениямассив объектов для новых временных объектов и просто сравнение с ними:

Obj o1 = o[i];
Obj o2 = o[i+1];

if (o1.var > o2.var)
//etc

Но, безусловно, есть что-то лучше.

Ответы [ 4 ]

1 голос
/ 17 июля 2011

Возможно, я не правильно понимаю ваш вопрос, но совершенно верно следующее:

if (o[i].var > o[i+1].var )  { // ...etc... }

Остерегайтесь, когда вы достигнете конца массива! То есть, если вы перебираете все элементы, а i является последним, то o[i+1] выдаст вам ошибку выхода за пределы массива!

1 голос
/ 17 июля 2011

Если у вас есть массив объектов, вы можете выполнить сравнение, не создавая временные ссылки:

MyObject[] arr = //populated somehow
for (int index = 0; index < arr.length - 1; index++) {
  if (arr[index].var > arr[index + 1].var) {
    //your logic
  }
}

Возможно, вы также захотите взглянуть на Comparable интерфейс как средство инкапсуляции сравнения объектов на основе определенного поля. Использование этого интерфейса позволит вам воспользоваться его поддержкой в ​​API Collections .

1 голос
/ 17 июля 2011

Исходя из ваших правок, было бы неплохо сказать

if (o[i].var > o[i+1].var) { ... }

при условии, что o был типа Obj[].

Мне любопытно: вы пытаетесь отсортировать массив? Если это так, вы можете использовать Arrays.sort() (Если нет, то в любом случае это хороший способ узнать).

0 голосов
/ 17 июля 2011

Просто используйте их напрямую без ссылки, т. Е. Подставьте поиск массива в место, где вы проводите сравнение.

if (o[i].var > o[i+1].var) {
    // etc
}

Или в цикле, делая все программно:

for (int i=0; i<o.length-1; i++) {
    if (o[i].var > o[i + 1].var) {
        // etc
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...