Solved

userCompare  challenge

Posted on 2016-08-30
Medium Priority
98 Views
Hi,

i am working one below challenge
http://codingbat.com/prob/p143482

i was not clear on below description

We have data for two users, A and B, each with a String name and an int id. The goal is to order the users such as for sorting. Return -1 if A comes before B, 1 if A comes after B, and 0 if they are the same. Order first by the string names, and then by the id numbers if the names are the same. Note: with Strings str1.compareTo(str2) returns an int value which is negative/0/positive to indicate how str1 is ordered to str2 (the value is not limited to -1/0/1). (On the AP, there would be two User objects, but here the code simply takes the two strings and two ints directly. The code logic is the same.)
what is A and what is B here to sort??

userCompare("bb", 1, "zz", 2) → -1
userCompare("bb", 1, "aa", 2) → 1
userCompare("bb", 1, "bb", 1) → 0
0
Question by:gudii9
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

• Help others & share knowledge
• Earn cash & points

LVL 28

Accepted Solution

Bill Bach earned 1000 total points
ID: 41778354
You really need to read the entire description carefully.  If you are going to be a coder, you must have a mind for details.

>what is A and what is B here to sort??
If you look at the code window on that page, you will see:
public int userCompare(String aName, int aId, String bName, int bId)
The first two fields are the string and integer for A, and the second two fields are the string and integer for B.  You are not sorting them, but only comparing them.

In the first example, the string for A is less than the string for B, so it returns -1.
In the second example, the string for A is more than the string for B, so it returns 1.
In the third example, the string for A is the same as the string for B, so it then compares the integer fields.  The integer fields are the same, so it returns 0.

This is stated in the problem just as clearly:
Return -1 if A comes before B,
[return] 1 if A comes after B, and
[return] 0 if they are the same.
Order first by the string names, and then by the id numbers if the names are the same.
0

LVL 84

Assisted Solution

ozo earned 1000 total points
ID: 41779284
public int userCompare(String aName, int aId, String bName, int bId) {
return (int)Math.signum(2*Math.signum(aName.compareTo(bName))+Math.signum(aId-bId));
}
0

LVL 7

Author Comment

ID: 41782484
``````public int userCompare(String aName, int aId, String bName, int bId) {
int res=aName.compareTo(bName);
if(aName.equals(bName)&&(aId==bId)){
return 0;
}
if(res>0){
return 1;

}else if(res<0){
return -1;

}else if(aId>bId){
return 1;

}else
return -1;

}
``````

above also passed all tests. Any improvements or alternate approaches?
0

Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Whether you’re a college noob or a soon-to-be pro, these tips are sure to help you in your journey to becoming a programming ninja and stand out from the crowd.
The SignAloud Glove is capable of translating American Sign Language signs into text and audio.
Viewers will learn about arithmetic and Boolean expressions in Java and the logical operators used to create Boolean expressions. We will cover the symbols used for arithmetic expressions and define each logical operator and how to use them in Boole…
In this fifth video of the Xpdf series, we discuss and demonstrate the PDFdetach utility, which is able to list and, more importantly, extract attachments that are embedded in PDF files. It does this via a command line interface, making it suitable …
Suggested Courses
Course of the Month10 days, 6 hours left to enroll