2013-11-18 4 views
0

Привет, я пытаюсь создать кусок кода, который генерирует массив случайной длины 15, а затем дает каждому элементу случайное число от 0 до 100, я хочу проверить расстояние между точкой 1 (которое установлено в 0) и расстояния, хранящиеся в массиве, например, элемент 2 имеет значение 60, поэтому расстояние от точки 1 равно 60, вместо отображения расстояния от точки 1 я хочу показать, какие точки ближе всего к точке 1 от наименьшего к самому большому, до сих пор я отсортировал массив как наименьшее число, но мне было интересно узнать, как я буду показывать, какой элемент хранит, какое расстояние, а не наоборот, например, ближайшая точка к точке 1 (0) является точкой 4 (89, вторая ближайшая точка к точке 1 - точка 3 (25), вот код, который у меня до сих пор:Как показать элемент массива вместо значения

static double distance(double x1, double x2) 
      { 
      return Math.sqrt((x2-x1)*(x2-x1)); 
      //Math.sqrt is the square root of the 2 co-ordinates 
      } 
public static void main(String[] args) 
{  

    Random randomGenerator = new Random(); 
    double x2, x1; //The Points 
    x1 = 0; 
    double distance;//The Math to work out distance 
    int randomInt2 = randomGenerator.nextInt(15)+1;//For Length of array 
    double [] distances = new double [randomInt2];//The Array 
    double store; 


    System.out.println("Distance Generated for point 1 : 0"); 
    System.out.println("Amount of points created is: "+randomInt2); 

    int range = 0;//Amount of Points 
    while (range < randomInt2) { 
    int randomInt3 = randomGenerator.nextInt(1000);//Distance for all points besides first  
    x2 = randomInt3;  
    distance = distance(x1,x2);  
    store = distance;//stores the distance to be put into array 
    distances[range] = store; 
    range++;//increments amount of points each time  
    } 

    for (double val : distances) { 
    System.out.print("["+val+"],"); 
    } 

    Arrays.sort(distances);// sorts array from highest to lowest 
    System.out.println("\nThe Nearest to point 1 is: " + distances[0]); 

Любая помощь была бы принята с благодарностью

ответ

0

Это классическая, но интересная проблема. Вы можете сохранить порядок точек во втором массиве, но вы не сможете сортировать их с расстояниями.

Вы работаете с реальным ООП или это только код кода типа C?

Вот что я хотел бы сделать:

  1. Создать класс, который содержит точку ранга точки в (например, пункт 4 имеет ранг 4), и ее координаты (х?).
  2. Интерфейс реализации Совместим с точкой и базой compareTo на расстоянии (знаете ли вы об этом интерфейсе?).
  3. Храните точки в списке точек (например, ArrayList точки) вместо массива.
  4. Сортировка списка с помощью Collections.sort (list) (если используется память).
  5. Redefine Point.toString, чтобы список можно было легко распечатать.

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

Не стесняйтесь задавать любые вопросы, если я неясен.

0

Вы должны создать класс Point с методом distance и compareTo. Метод compareTo должен проверить, какое расстояние больше. Чем вам нужен массив точек, а не двойной массив, и вы должны отсортировать его с помощью интерфейса Comparable.

// THIS IS A STUB 
class Point() implements Comparable<Point> 
{ 
    public double distance(Point p) { 
     .... 
    } 

    public int compareTo(Point p) 
    { 
     return new Double(this.distance()).compareTo(p.distance()); 
    } 

} 

public static void main(String[] args) { 
    .... 
    Point[] points = new Point[15]; 
    .... 
    Arrays.sort(points); 
    .... 
} 
1

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

double[] distances = new double[]{ 1, 3, 2, 0.5 }; 
SortedMap<Double, Integer> arrayIndexByDistance = new TreeMap<>(); 
for (int i = 0; i < distances.length; i++) { 
    arrayIndexByDistance.put(distances[i], i); 
} 
System.out.println("Distances (sorted): " + arrayIndexByDistance.keySet()); 
System.out.println("Indexes (sorted by distance): " + arrayIndexByDistance.values()); 

Выход:

Distances (sorted): [0.5, 1.0, 2.0, 3.0] 
Indexes (sorted by distance): [3, 0, 2, 1] 
Смежные вопросы