2015-12-16 2 views
1

** Это мое первое сообщение в StackOverflow, и я код только в старшей школе, поэтому я отнюдь не профессионал. Я на самом деле довольно новичок XD. Важно также отметить, что я использую ReadyToProgramInJava в качестве моей IDE, поэтому я использую консоль HSA для кодирования моих программ. В любом случае, по моему вопросу.Отобразить имена переменных для сортировки массива?

Я кодирую программу, которая требует от меня сортировки массива int и отображения максимального значения внутри этого массива. Я использую array.sort, чтобы упорядочить переменные в порядке возрастания, а затем распечатать максимальное значение массива. Что-то вроде этого:

public class stackOverflowQuestion 


Console c; 
public stackOverflowQuestion() 
{ 
    c = new Console(); 
} 


public void Sorting() 
{ 
int obi = 10; 
int luke = 4; 
int vader =21; 
int palpatine = 5; 
    int [ ] people = {obi, luke, vader, palpatine}; 
    Arrays.sort(people);  
    c.println (people [people.length - 1]); 
} 


public static void main (String[] args) 
{ 
    stackOverflowQuestion s = new stackOverflowQuestion(); 
    s.Sorting(); 
} 

Проблема заключается в следующем: когда я печатаю наибольшее значение массива, он отображает только номер. Итак, если бы я запускал эту программу в ее нынешнем виде, она выдавала бы «21». В идеале я бы хотел, чтобы оно печатало имя переменной с наивысшим значением. Поэтому, после запуска этой программы, мне бы хотелось напечатать «Vader». Есть какой-либо способ сделать это?

Прошу прощения, если это кажется страшным вопросом для несовершеннолетних, но я относительно новичок в программировании.

Спасибо, Hayden

+1

Я думаю, что 'с = новая консоль();' не будет компилировать. Конструктор Console() не отображается –

ответ

-2

Вы должны использовать массив строк вместо Int массива.

String[ ] people = {"obi", "luke", "vader", "palpatine"}; 
Arrays.sort(people); 
System.out.println(people[people.length-1]); 

EDITED В этом случае вы должны использовать эту стратегию.

public class Test { 
public static void main(String[] args) {   
    Person[] persons = new Person[4]; 
     persons[0] = new Person("obi", 10); 
     persons[1] = new Person("luke", 4); 
     persons[2] = new Person("vader", 21); 
     persons[3] = new Person("palpatine ", 5); 
    Arrays.sort(persons); 
    System.out.println(persons[persons.length - 1].getName()); 
} 
} 
class Person implements Comparable<Person>{ 
    private String name; 
    private int number; 
    public Person(String name, int number) { 
     this.name = name; 
     this.number = number; 
    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public int getNumber() { 
     return number; 
    } 
    public void setNumber(int number) { 
     this.number = number; 
    } 
    @Override 
    public int compareTo(Person otherPerson) { 
     Person thisPerson = this; 
     return thisPerson.getNumber() > otherPerson.getNumber() ? 1 : -1; 
    } 
} 
+0

Это просто сортирует по строке ... Вопрос пытается сортировать по значению ... – Adam

+0

Я отредактировал свой ответ. ** Скопируйте ** вышеуказанный код в файл 'Test.java'. @Adam –

0

Вы пытаетесь напечатать имя переменной вместо значения. Идеально таким образом вы не можете. Но вы можете попробовать что-то подобное с enums. Также c = new Console(); не будет компилироваться, если вы используете java.io.Console вы не можете инициализировать этот путь, так как Console конструктор private

Например:

public class Test { 
public void Sorting() { 
    int[] people = {Values.obi.getCode(), Values.luke.getCode(), Values.vader.getCode(), Values.palpatine.getCode()}; 
    Arrays.sort(people); 
    System.out.println(Values.getEnum(people[people.length - 1])); 
} 

public static void main(String[] args) { 
    Test s = new Test(); 
    s.Sorting(); 
} 

public enum Values { 
    obi(10), luke(4), vader(21), palpatine(5); 

    private int code; 

    Values(int i) { 
     this.code = i; 
    } 

    public int getCode() { 
     return code; 
    } 

    public static Values getEnum(int code) { 
     switch (code) { 
      case 10: 
       return obi; 
      case 4: 
       return luke; 
      case 21: 
       return vader; 
      case 5: 
       return palpatine; 
      default: 
       return null; 
     } 
    } 
    } 
} 
1
  • Java не предлагает стандартный способ доступа к переменным имена так, как вы require ...
  • В момент создания массива информация теряется ... Это пропуск по значению, а не по ссылке, поэтому вы передаете массив значений 10, 4, 21 и 5 в Java

Поэтому вам нужно каким-то образом увязывания значения и имена ...

  • Вы могли бы следовать различные перечисления, и переключатель хаков в других вопросах, но я считаю, что эти пропустить точку
  • Я бы рекомендовал более OO-подход, с классом, называемым Person, который хранит имя и значение, вместе ...
  • Arrays.sort() не знает, как сортировать объекты Person, поэтому он либо требует, чтобы Person реализовал java.lang.Comparable, либо пройти необязательно java.util.Comparator, я привел пример более позднего.

Код

public class StackOverflowQuestion { 
    private class Person { 
     private String name; 
     private int value; 
     public String getName() { 
      return name; 
     } 
     public int getValue() { 
      return value; 
     } 
     public Person(String name, int value) { 
      super(); 
      this.name = name; 
      this.value = value; 
     } 
    } 

    private class Sorting { 
     public Sorting() { 
      Person[] people = { new Person("obi", 10), 
           new Person("luke", 4), 
           new Person("vader", 21), 
           new Person("palpatine", 5) }; 

      Arrays.sort(people, new Comparator<Person>() { 
       @Override 
       public int compare(Person o1, Person o2) { 
        return o1.getValue() - o2.getValue(); 
       } 
      }); 
      System.out.println(people[people.length - 1].getName()); 
     } 
    } 
    public static void main(String[] args) throws IOException { 
     new StackOverflowQuestion().new Sorting(); 
    } 
} 
+0

Почему «Личность» и «Сортировка» статичны? –

+0

Я сделал Сортировку статическим, чтобы он мог быть создан из основного (String [] args) без необходимости делать новый StackOverflowQuestion(). New Sorting(), но это выходит за рамки вашего вопроса, я обновлю свой ответ. – Adam

-1

`общественный класс StackOverflowQuestion {

public void sorting() { 
    final int obi = 10; 
    final int luke = 4; 
    final int vader = 21; 
    final int palpatine = 5; 
    int[] people = { obi, luke, vader, palpatine }; 
    Arrays.sort(people); 
    // max value 
    int max = people[people.length - 1]; 
    System.out.println("Max Value:" + max); 
    switch (max) { 
    case obi: 
     System.out.println("Obi"); 
     break; 
    case luke: 
     System.out.println("Luke"); 
     break; 
    case vader: 
     System.out.println("Vader"); 
     break; 
    case palpatine: 
     System.out.println("Palpatine "); 
     break; 
    } 
} 

public static void main(String[] args) { 
    StackOverflowQuestion s = new StackOverflowQuestion(); 
    s.sorting(); 
} 

}`

+0

Это не будет хорошо масштабироваться до сотни человек. –

+0

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