Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsWhite Papers
Discussion GroupsFirst AidDatabasesJavaBeansGUIJava 3DVirtual MachineCORBASecurityToolsGeneral
Java DirectoryOpen Source ProjectsSample Book ChaptersUser GroupsWeb Resources
Related Topics
Databases.NETMore Topics ...

Java Forum / General / March 2008

Tip: Looking for answers? Try searching our database.

My set fails

Thread view: 
-Rick- - 23 Mar 2008 08:49 GMT
Could anyone tell me why?  How do I fix it?

package setTest;
import java.util.*;

public class SetTest implements Comparable<SetTest> {
   public String toString(){
       return this.s1 + " " + this.x1;
   }
   public static void display(){
       for(SetTest s : set){
           System.out.println(s);
       }
   }
   public static void populate(){
       for (int i = 1; i < 3; i++){
           set.add(new SetTest(1, "One"));
           set.add(new SetTest(2, "One"));
           set.add(new SetTest(1, "Two"));
       }
   }
   public String getX1(){
       return x1;
   }
   public int getS1(){
       return s1;
   }

   public boolean equals(Object o) {
       if (!(o instanceof SetTest))
           return false;
       SetTest s = (SetTest)o;
       if(s.getS1() == this.getS1() && s.getX1() == this.getX1())
           return true;
       else
           return false;
   }
   public int compareTo(SetTest s){
       if(this == s)
           return 1;
       else
           return -1;
   }

   public SetTest(int s, String x){
       s1 = s;
       x1 = x;
   }
   public static void main(String[] args){
       populate();
       System.out.println("The size of set is: " + set.size());
       display();
   }
   private int s1;
   private String x1;
   static protected Set<SetTest> set = new TreeSet<SetTest>();
}
rossum - 23 Mar 2008 11:19 GMT
>Could anyone tell me why?  How do I fix it?
How does it fail?  What is it doing that you do not want it to do?
What is it not doing that you want it to do?

>package setTest;
>import java.util.*;
[quoted text clipped - 37 lines]
>            return -1;
>    }
This implementation of compareTo is almost certainly wrong.  compareTo
returns a negative, zero or positive.  Your version here can never
return zero.  You need to check the documentation first.

>    public SetTest(int s, String x){
>        s1 = s;
[quoted text clipped - 3 lines]
>        populate();
>        System.out.println("The size of set is: " + set.size());
What is set.size()?  You have not declared anything called "set" and
you have not defined a method called"size()".

rossum

>        display();
>    }
>    private int s1;
>    private String x1;
>    static protected Set<SetTest> set = new TreeSet<SetTest>();
>}
Lew - 23 Mar 2008 11:37 GMT
-Rick- wrote:
>>    public boolean equals(Object o) {
>>        if (!(o instanceof SetTest))
[quoted text clipped - 4 lines]
>>        else
>>            return false;

How come you don't just
  return s.getS1() == this.getS1() && s.getX1() == this.getX1();
?

>>    }

>>    public static void main(String[] args){
>>        populate();
>>        System.out.println("The size of set is: " + set.size());

> What is set.size()?  You have not declared anything called "set" and
> you have not defined a method called"size()".

-Rick- wrote:
>>    static protected Set<SetTest> set = new TreeSet<SetTest>();
>> }

And that is the reason I excoriate placing member declarations at the bottom.

The standard is to place them before method declarations:
<http://java.sun.com/docs/codeconv/html/CodeConventions.doc2.html#1852>

To the OP: You cause confusion when you deviate from the standard or the few
allowable variations (e.g., the opening brace on its own line indented the
same as its control statement).

Signature

Lew

-Rick- - 23 Mar 2008 15:47 GMT
> -Rick- wrote:
> >>    public boolean equals(Object o) {
[quoted text clipped - 31 lines]
> --
> Lew

@Rossum:  I put my class variables at the bottom.  All of my java and c
++ literature puts them at the bottom.  I'm hoping some of their
genius rubs off on me ;)
@Lew: I browsed your link and it talks of the order of writing
variables, not about putting them above or below your method code.

My error is that it outputs the results twice, ie:
Compiling 1 source file to C:\myJavaFiles\SetTest\build\classes
compile:
run:
The size of set is: 6
1 One
1 Two
1 Two
2 One
2 One
1 One
BUILD SUCCESSFUL (total time: 5 seconds)

Last time I saw this error, it was a super constructor issue.  But I
don't know about this one.
I abused the compareTo() because I'm trying to compare ints and the
compiler tells me that I ints can't be dereferenced.

@Lew: return s.getS1() == this.getS1() && s.getX1() == this.getX1();
doesn't work because it returns boolean and the compiler wants an int
(int compareTo()).

Could someone please help me out in this issue?
Lew - 23 Mar 2008 17:02 GMT
>>>>    public boolean equals(Object o) {
>>>>        if (!(o instanceof SetTest))
[quoted text clipped - 4 lines]
>>>>        else
>>>>            return false;

Lew wrote:
>> How come you don't just
>>    return s.getS1() == this.getS1() && s.getX1() == this.getX1();
>> ?

> @Lew: return s.getS1() == this.getS1() && s.getX1() == this.getX1();
> doesn't work because it returns boolean and the compiler wants an int
> (int compareTo()).

Please note: I did not make that suggestion for compareTo().

Signature

Lew



Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.