Need help with one quick issue. Can\'t seem to properly compare two numbers prop
ID: 3563963 • Letter: N
Question
Need help with one quick issue. Can't seem to properly compare two numbers properly.
I am trying to compare two roman numerals. I can convert them to string and all, but I am messing up the actual comparison. I think I need to use "this" somewhere in my code, but I don't know how to do it. Code is below. Please look at the last 20 lines or so. When I compare 1793 and 1793, I should get 0 to show equality, but I am not getting that now.
package Project1;
public class RomanN {
private String romanVersion = ""; //
private int Numeric; //make it public up top
private int value = 0;
private int Numeric2;
String undefined = "-100";
public RomanN(int integerValue){
Numeric = integerValue;
// String romanVersion = toString2();
// System.out.println(romanVersion);
// int integerVersion = toInt2();
// System.out.println(integerVersion);
//System.out.println(value);
}
public String toString2(){
String r = "";
if (Numeric < 0 || Numeric > 2500){
return undefined;
}
while(Numeric>=1000){
r+="M";
Numeric -= 1000;
}
if (Numeric>= 500){
if (Numeric>=900){
r+="CM";
Numeric -=900;
}
if (Numeric>=800){
r+="DCCC";
Numeric -=800;
}
if (Numeric>=700){
r+="DCC";
Numeric -=700;
}
if (Numeric>=600){
r+="DC";
Numeric -=600;
}
if (Numeric>=500){
r+="D";
Numeric -=500;
}
}
if (Numeric< 500){
if (Numeric>=400){
r+="CD";
Numeric -=400;
}
if (Numeric>=300){
r+="CCC";
Numeric -=300;
}
if (Numeric>=200){
r+="CC";
Numeric -=200;
}
if (Numeric>=100){
r+="C";
Numeric -=100;
}
}
if (Numeric>= 50){
if (Numeric>=90){
r+="XC";
Numeric -=90;
}
if (Numeric>=80){
r+="LXXX";
Numeric -=80;
}
if (Numeric>=70){
r+="LXX";
Numeric -=70;
}
if (Numeric>=60){
r+="LX";
Numeric -=60;
}
if (Numeric>=50){
r+="L";
Numeric -=50;
}
}
if (Numeric< 50){
if (Numeric>=40){
r+="XL";
Numeric -=40;
}
if (Numeric>=30){
r+="XXX";
Numeric -=30;
}
if (Numeric>=20){
r+="XX";
Numeric -=20;
}
if (Numeric>=10){
r+="X";
Numeric -=10;
}
}
if(Numeric ==9){r+="IX";}
if(Numeric ==8){r+="VIII";}
if(Numeric ==7){r+="VII";}
if(Numeric ==6){r+="VI";}
if(Numeric ==5){r+="V";}
if(Numeric ==4){r+="IV";}
if(Numeric ==3){r+="III";}
if(Numeric ==2){r+="II";}
if(Numeric ==1){r+="I";}
romanVersion = r;
return romanVersion;
}
public int toInt2() {
if (romanVersion.equals("")){return value;}
if(romanVersion.length()>= 2 && romanVersion.substring(0,2).equals("MM")){
value+=2000;
if (romanVersion.substring(0).equals("")){return value;}
romanVersion = romanVersion.substring(2);
}
if(romanVersion.length()>= 1 &&romanVersion.substring(0,1).equals("M")){
value+=1000;
if (romanVersion.substring(0).equals("")){return value;}
romanVersion = romanVersion.substring(1);
}
if (romanVersion.length()>= 1 && (romanVersion.substring(0,1).equals("D")|| romanVersion.substring(0,1).equals("C"))){
if (romanVersion.length()>= 2 &&romanVersion.substring(0,2).equals("CM")){
value+=900;
if (romanVersion.substring(0).equals("")){return value;}
romanVersion = romanVersion.substring(2);;
}
if (romanVersion.length()>= 4 && romanVersion.substring(0,4).equals("DCCC")){
value+=800;
if (romanVersion.substring(0).equals("") ){return value;}
romanVersion = romanVersion.substring(4);;
}
if (romanVersion.length()>= 3 &&romanVersion.substring(0,3).equals("DCC")){
value+=700;
if (romanVersion.substring(0).equals("") ){return value;}
romanVersion = romanVersion.substring(3);;
}
if (romanVersion.length()>= 2 &&romanVersion.substring(0,2).equals("DC")){
value+=600;
if (romanVersion.substring(0).equals("") ){return value;}
romanVersion = romanVersion.substring(2);;
}
if (romanVersion.length()>= 1 &&romanVersion.substring(0,1).equals("D")){
value+=500;
if (romanVersion.substring(0).equals("") ){return value;}
romanVersion = romanVersion.substring(1);;
}
if (romanVersion.length()>= 2 &&romanVersion.substring(0,2).equals("CD")){
value+=400;
if (romanVersion.substring(0).equals("") ){return value;}
romanVersion = romanVersion.substring(2);;
}
if (romanVersion.length()>= 3 &&romanVersion.substring(0,3).equals("CCC")){
value+=300;
if (romanVersion.substring(0).equals("") ){return value;}
romanVersion = romanVersion.substring(3);;
}
if (romanVersion.length()>= 2 &&romanVersion.substring(0,2).equals("CC")){
value+=200;
if (romanVersion.substring(0).equals("") ){return value;}
romanVersion = romanVersion.substring(2);;
}
if (romanVersion.length()>= 1 &&romanVersion.substring(0,1).equals("C")){
value+=100;
if (romanVersion.substring(0).equals("") ){return value;}
romanVersion = romanVersion.substring(1);;
}
}
if (romanVersion.length()>= 1 && (romanVersion.substring(0,1).equals("X")|| romanVersion.substring(0,1).equals("L"))){
if (romanVersion.length()>= 2 &&romanVersion.substring(0,2).equals("XC")){
value+=90;
if (romanVersion.substring(0).equals("") ){return value;}
romanVersion = romanVersion.substring(2);;
}
if (romanVersion.length()>= 4 &&romanVersion.substring(0,4).equals("LXXX")){
value+=80;
if (romanVersion.substring(0).equals("") ){return value;}
romanVersion = romanVersion.substring(4);;
}
if (romanVersion.length()>= 3 &&romanVersion.substring(0,3).equals("LXX")){
value+=70;
if (romanVersion.substring(0).equals("") ){return value;}
romanVersion = romanVersion.substring(3);;
}
if (romanVersion.length()>= 2 &&romanVersion.substring(0,2).equals("LX")){
value+=60;
if (romanVersion.substring(0).equals("") ){return value;}
romanVersion = romanVersion.substring(2);;
}
if (romanVersion.length()>= 1 &&romanVersion.substring(0,1).equals("L")){
value+=50;
if (romanVersion.substring(0).equals("") ){return value;}
romanVersion = romanVersion.substring(1);;
}
if (romanVersion.length()>= 2 &&romanVersion.substring(0,2).equals("XL")){
value+=40;
if (romanVersion.substring(0).equals("") ){return value;}
romanVersion = romanVersion.substring(2);;
}
if (romanVersion.length()>= 3 &&romanVersion.substring(0,3).equals("XXX")){
value+=30;
if (romanVersion.substring(0).equals("") ){return value;}
romanVersion = romanVersion.substring(3);;
}
if (romanVersion.length()>= 2 &&romanVersion.substring(0,2).equals("XX")){
value+=20;
if (romanVersion.substring(0).equals("") ){return value;}
romanVersion = romanVersion.substring(2);;
}
if (romanVersion.length()>= 1 &&romanVersion.substring(0,1).equals("X")){
value+=10;
if (romanVersion.substring(0).equals("") ){return value;}
romanVersion = romanVersion.substring(1);;
}
}
if (romanVersion.length()== 2 &&romanVersion.substring(0,2).equals("IX")){
value+=9; return value;
}
if (romanVersion.length()== 4 &&romanVersion.substring(0,4).equals("VIII")){
value+=8; return value;
}
if (romanVersion.length()== 3 &&romanVersion.substring(0,3).equals("VII")){
value+=7; return value;
}
if (romanVersion.length()== 2 &&romanVersion.substring(0,2).equals("VI")){
value+=6; return value;
}
if (romanVersion.length()== 1 &&romanVersion.substring(0,1).equals("V")){
value+=5; return value;
}
if (romanVersion.length()== 2 &&romanVersion.substring(0,2).equals("IV")){
value+=4; return value;
}
if (romanVersion.length()== 3 &&romanVersion.substring(0).equals("III")){
value+=3; return value;
}
if (romanVersion.length()== 2 &&romanVersion.substring(0).equals("II")){
value+=2; return value;
}
if (romanVersion.length()== 1 &&romanVersion.substring(0).equals("I")){
value+=1;return value;
}
//System.out.println(value);
return value;
}
int compareTo(RomanN r){
int i = 0;
int j = 0;
Numeric2 = this.r.toInt();
Numeric2= Numeric2-value;
if (value> Numeric2){
i=1;
}
if (value < Numeric2){
i=-1;
}
if (value == Numeric2) {
i=0;
}
System.out.println(i);
return i;
}
public static void main (String[] args) {
RomanN Test1 = new RomanN(1793);
System.out.println(Test1.toString2());
System.out.println(Test1.toInt2());
RomanN Test2 = new RomanN(1793);
System.out.println(Test2.toString2());
System.out.println(Test2.toInt2());
Test1.compareTo(Test2);
}}
Explanation / Answer
int compareTo(RomanN r){
int i = 0;
int j = 0;
Numeric2 = this.r.toInt();
// Numeric2= Numeric2-value; // just remove this line . then compareTo function is fine.
if (value> Numeric2){
i=1;
}
if (value < Numeric2){
i=-1;
}
if (value == Numeric2) {
i=0;
}
System.out.println(i);
return i;
}
// Actual problem is there in toInt2(). Once the toInt2() function is called, next return value by toInt2() is increasing by 3. This you can easily identify by calling repeatedly toInt2() and print its return value.
// toInt2() function is WRONG.
// If you can give me another 1500 points, then I can give you fresh code which serves your purpose.
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.