1

I have an unsorted array of objects. I need to know how I can sort my array in descending order, according to the highest value inside the objects.

I need to do this using for loops, not the easy way.

I had done this but it seems there is a problem:

student[] temp=new student[s.length];

for (int i=0;i<s.length;i++)
{
    if (s[i].GetGpa() > s[i + 1].GetGpa())
    {
        temp[i] = s[i];
    }
}

How should I do it using for loops?

3

5 Answers 5

3

This should get you started. You'll need to create your own Comparator and then call Collections.Sort().

Collections.sort(List<T> list, Comparator<? super T> c)
Sign up to request clarification or add additional context in comments.

Comments

2

I suggest looking at the Wikipedia article for sorting algorithms. Your code fails because you compare each element only with the next one - but that's not a sorting algorithm at all, because in order to be correctly placed in the first position, an element needs to be bigger than all other elements, not just the next one.

Also, Using a lowercase class name is very much against Java coding standards.

1 Comment

and also methods : getGpa() - nice Java; GetGpa() - C# like
1
public class Student implements Comparable { ... }
    Arrays.sort(students);
    List<Object> list = Arrays.asList(students);
    Collections.reverse(list);
    students = list.toArray();

4 Comments

This won't work because you need to call GetGpa() on each student object to do the comparison.
uff, yes my bad but maybe implements Comparable can save it
Yes, that's basically what I suggested.
your fingers are little bit faster than mine :) you replied few seconds before me, but yes you are right
1
for (int j=0;j<s.length;j++) {
    for (int i=0;i<s.length - 1 - j;i++)
    {
        if (s[i].GetGpa() > s[i + 1].GetGpa())
        {
            student temp = s[i];
            s[i] = s[i+1];
            s[i+1] = temp;
        }
    }
}

1 Comment

there is a problem come when i put this code Exception in thread "main" java.lang.NullPointerException at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source) at java.lang.Double.parseDouble(Unknown Source) at main_function.main(main_function.java:35)
0
for(int i=0;i<s.length;i++)
{
    for(int j=i+1;j<s.length;j++)
    {
        if(s[j].GetGpa()>s[i].GetGpa())
        {
            student[] temp=new student[5];
            temp[j]=s[j];
            s[j]=s[i];
            s[i]=temp[j];
        }
    }
}

2 Comments

Note that new student[5] will create a fixed array. Attempting to use an index beyond 4 (0-4 is 5 values) will cause an Exception. java.sun.com/docs/books/tutorial/java/nutsandbolts/arrays.html
Also here's an applet that demonstrates the different sorting algorithms: cs.oswego.edu/~mohammad/classes/csc241/samples/sort/…

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.