My set fails

R

-Rick-

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>();
}
 
R

rossum

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.*;

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;
}
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;
x1 = x;
}
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()".

rossum
 
L

Lew

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()".

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).
 
R

-Rick-

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());
rossum said:
What is set.size()? You have not declared anything called "set" and
you have not defined a method called"size()".

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).

@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?
 
L

Lew

-Rick- said:
@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().
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,483
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top