Farzan
Farzan

Reputation: 29

Why does this method always return false?

I would like to evaluate a phone number using the provided method. The phone number should always have a length of 10. However the following method always seems to return false. Why is that? Thanks.

public static boolean valPhoneNumber(String phonenumber){
    boolean result= true; 

    if (phonenumber.length() > 10 || phonenumber.length() < 10){ 
        result= false;            

    }else                           
            phonenumber.length();
            char a=phonenumber.charAt(0); 
            char b=phonenumber.charAt(1);            
            char d=phonenumber.charAt(3);
            char e=phonenumber.charAt(4);
            char f=phonenumber.charAt(5);

            if (a<2 || a>9){ 
               result = false;
            }else if( b<0 || b>8){ 
                result = false;
            }else if (d<2 || d>9){ 
                result = false;
            }else if (e==1 && f==1){ 
                result = false;
            }                  
    return result;
}

Upvotes: 2

Views: 205

Answers (6)

Bilal Siddiqui
Bilal Siddiqui

Reputation: 3629

So looking into your ladder which is comparing character to number. In this case the comparison will happen with ASCII value.

You can put single quotes to check the range:

if (a < '2' || a > '9') { 
    result = false;
} else if( b < '0' || b > '8') { 
    result = false;
} else if (d < '2' || d > '9') { 
    result = false;
} else if (e == '1' && f == '1') { 
    result = false;
}

One liner:

result = !((a < '2' || a > '9') || (b < '0' || b > '8') || (d < '2' || d > '9') || (e == '1' && f == '1'));

Upvotes: 8

Farzan
Farzan

Reputation: 29

I added single quotes to check the range. Thank you all.

public static boolean valPhoneNumber(String phonenumber) {
    boolean result= true; 

    if (phonenumber.length() != 10) { 
        result = false;            
    } else { 
        //phonenumber.length();
        char a = phonenumber.charAt(0); 
        char b = phonenumber.charAt(1);            
        char d = phonenumber.charAt(3);
        char e = phonenumber.charAt(4);
        char f = phonenumber.charAt(5);

        if (a < '2' || a > '9') { 

        } else if( b<'0' || b>'8') {  
            result = false;
        } else if (d < '2' || d > '9') { 
            result = false;
        } else if (e == '1' && f == '1') { 
            result = false;
        }                  
    }

    return result;
}

Upvotes: 0

Eritrean
Eritrean

Reputation: 16498

I think an approach with regex here would be the cleanest and easiest solution.

public static boolean valPhoneNumber(String phonenumber){
    String regex = "[2-9][0-8][0-9][2-9][02-9][0-29][0-9]{4}";
    return phonenumber.matches(regex);
}

Upvotes: 1

roamer
roamer

Reputation: 163

you can try this:

int a = Integer.parseInt(phonenumber.substring(0,1));

Upvotes: 0

Sadisha
Sadisha

Reputation: 571

You should cast the char variables to integer.

Upvotes: 0

Hưng Chu
Hưng Chu

Reputation: 1052

I think your code wrong at the parsing phonenumber.charAt(). This always return char, and when you do comparision with integer it will convert to number which present to that char code (ASCII code). I think you should modify your code to int a=Character.getNumericValue(phonenumber.charAt(0)); and so on

Upvotes: 1

Related Questions