2013-08-18 4 views
0

Я довольно новичок в java, и я пытаюсь создать простой метод, который сортирует введенные числа, как по восходящей, так и по нисходящей. Однако есть проблема, что я не могу использовать повторяющиеся значения. Есть ли способ получить ключ определенного элемента массива?Как получить ключ элемента определенного элемента массива?

Мой код:

import java.io.Console; 

public class TestSort { 
    public static void main(String args[]) { 
     Console c = System.console(); 
     if (c == null) { 
      System.err.println("No console."); 
      System.exit(1); 
     } 

     System.out.println("TESTSORT.java"); 
     System.out.println("-------------"); 
     System.out.println("Type in a set of numbers here:"); 
     String in = c.readLine(); 
     System.out.println("(A)scending or (D)escending"); 
     String ad = c.readLine(); 

     boolean d = false; 

     if(ad.equals("a")) d = false; 
     else if(ad.equals("d")) d = true; 
     else { 
      System.out.println("Invalid Input."); 
      System.exit(1); 
     } 

     String[] in2 = in.split(" "); 
     int[] x = new int[in2.length]; 

     int count1 = 0; 
     for(String val : in2) 
      x[count1++] = Integer.parseInt(val); 

     int[] a = new int[x.length]; 
     int count = 0; 

     for(int y : x) { 
      for(int z : x) { 
       // if index of y equals index of z continue 
       if(z < y) count++; 
      } 
      a[count] = y; 
      count = 0; 
     } 

     if(d) { 
      int[] arr3 = new int[a.length]; 
      int length = a.length; 
      for(int b : a) arr3[--length] = b; 
      for(int b : arr3) System.out.println(b); 
     } else 
      for(int b : a) 
       System.out.println(b); 
    } 
} 

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

Справка будет принята с благодарностью.

Спасибо.

+2

Какой у вас код в настоящее время? Работает/не работает? Какие ошибки/выходные вы получаете? –

+0

Для доступа к определенному элементу массива необходимо иметь индекс. Я не понимаю, о чем вы спрашиваете. –

+0

Извините, я имел в виду, как получить доступ к ключу элемента массива. –

ответ

3

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

int indexVal = -1; 
int inputValue; // This is your input vlaue you are trying to find 
for(int i = 0; i < array.length ; i++) 
{ 
    if (array[i] == inputValue) 
    { 
     indexVal = i; 
     break; 
    } 
} 

Вы также можете посмотреть на Array.sort для встроенного в массиве sorrting

1

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

0

A SortedSet идеально подходит для этого. Как набор, он не позволяет дублировать значения, и он автоматически сортируется для вас!

Просто добавьте элементы в набор, например:

SortedSet<Integer> set = new SortedSet<Integer>(); 
for(String value : in2.split(" ")){ 
    set.add(Integer.parseInt(value)); 
} 

Чтобы изменить порядок набора сделать что-то вроде этого:

SortedSet<Integer> descending = set.descendingSet(); 

Вы можете перебирать наборы так же, как массивы тоже:

for(Integer i : set){ 
    //Do something 
} 

Удачи вам!

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