2014-11-21 2 views
0

Я пытаюсь объединить три разных объекта «Список».Как записать позицию нескольких объектов, сохраняя при этом масштабируемость?

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

Так что, если я говорю:

void main() { 
    addStuff(1, 12, true); 
} 
void updateStuff(int i1, int i2, boolean b1) { 
    list1.add(i1); 
    list2.add(i2); 
    list3.add(i3); 
} 

то, что бы сохранить три соответствующие значения.

Теперь, как бы я мог получить эти переменные, но при этом сохраняя поддержку для удаления элементов из списка (то есть, если я удалю один элемент из каждого списка - те, которые соответствуют друг другу.)

Извиняюсь, если я не объяснял себя четко - я с радостью дам более подробную информацию, если потребуется.

Спасибо!

+1

Похоже, вы пытаетесь использовать параллельные массивы (или в этом случае списки), где, вероятно, будет более подходящим один список объектов. – khelwood

+0

Да, общий консенсус, похоже, таков. Я дам ему шанс, спасибо! – DavidCa1226

ответ

5

Возможно, вам следует создать класс, содержащий эти два int и один логический.

Тогда у вас может быть один List<YourClass>.

public class YourClass 
{ 
    private int a; 
    private int b; 
    private boolean c; 

    public YourClass (int a, int b, boolean c) { 
     this.a=a; 
     this.b=b; 
     this.c=c; 
    } 

    // add some getters and setters here 
} 

    void updateStuff(int i1, int i2, boolean b1) 
    { 
     list.add(new YourClass(i1,i2,b1)); 
    } 

Таким образом, вам не придется беспокоиться о синхронизации списков при добавлении/удалении элементов, так как у вас есть только один список.

+0

Это имеет смысл, но на самом деле это не работает. Позвольте мне немного уточнить, что я пытаюсь сделать: Я делаю кучу разных экземпляров объекта. Я хочу, чтобы каждый объект хранил, скажем, значение xPos и ​​yPos, а затем проверял, насколько далеко он от каждого другого объекта, чтобы убедиться, что ни один из них не закрывается. Я не уверен, как это сделать с этой стратегией, поскольку мне (теоретически) могут понадобиться бесконечные экземпляры объектов и, следовательно, проверки. – DavidCa1226

+0

@ DavidCa1226 Ваш комментарий не имеет смысла, так же как и те же ограничения для ваших списков – Durandal

+0

Хорошо, я не читал его код правильно. Я думаю, что знаю, как это сделать, поскольку, казалось бы, проблема с несколькими списками была проблемой. Благодаря! :) – DavidCa1226

1

Ну, если я понял, что вы пытаетесь сделать из своего комментария к ответу Эрана (может быть, хорошая идея предоставить эту информацию по вашему вопросу, чтобы все люди могли вам помочь), у вас есть куча точек на картезианской плоскости и должны проверить, слишком ли близка ли она к другой. Чтобы избежать необходимости столь большого количества проверок каждый раз, когда вам нужна эта информация, которую вы хотите сохранить в какой-либо структуре данных, которая будет обновляться каждый раз при вставке новой точки. Верно ли это?

Если да, то вы можете создать график, представляющий эту информацию:

public class MyPoints { 
    private List<Point> points = new ArrayList<>(); 

    private List<List<Boolean>> tooCloseGraph = new ArrayList<>(); 

    public void addPoint(Point point){ 
     List<Boolean> newLine = new ArrayList<>(); 
     for(Point p : points){ 
      newLine.add(p.isTooClose(point)); 
     } 
     newLine.add(true) //Assuming a point is too close to itself 
     tooCloseGraph.add(newLine); 
     points.add(point); 
    } 

    public boolean isTooClose(int a, int b){ 
     if(a > b) 
      return tooCloseGraph.get(a).get(b); 
     else 
      return tooCloseGraph.get(b).get(a); 
    } 

    public boolean isTooClose(Point a, Pont b){ 
     return isTooClose(points.indexOf(a), points.indexOf(b)); 
    } 
} 

Я have't проверил это, но я думаю, что это работает.

Cheers!

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