这是怎么回事?

时间:2019-10-29 07:31:32

标签: java string logical-operators

有效的印度手机号码规则:

该数字应包含10或11或12位数字。

如果包含10位数字,则第一位应该是7或8或9。

如果包含11位数字,则第一个数字应为0,第二个规则应遵循。

如果包含12位数字,则前两位数字应为91,然后是第二个规则。

对于测试用例:

1
881906355596

此代码应产生“无效”,但显示为“有效”。

import java.util.*;
import java.lang.*;
import java.io.*;
class GFG
 {
    public static void main (String[] args)
     {
     Scanner scan = new Scanner(System.in);
     int t=scan.nextInt();
     while((t--)!=0){

         String s = scan.next();
         int length = s.length();

         if((length==10) &&((s.charAt(0)=='7')||(s.charAt(0)=='9')||(s.charAt(0)=='8')))
         System.out.println("Valid");

         else if((length==11) &&(s.charAt(0)=='0')&&(s.charAt(0)=='7')||(s.charAt(0)=='9')||(s.charAt(0)=='8'))
         System.out.println("Valid");//code

         else if((length==12) &&(s.charAt(0)=='9')&&(s.charAt(1)=='1'))
         System.out.println("Valid");//code

         else System.out.println("Invalid");
     }
     }
}

2 个答案:

答案 0 :(得分:7)

您的第二个和第三个条件是错误的。

第二个条件为您的true输入错误地返回了881906355596

您将了解为什么按如下方式安排它:

else if (
    (length==11) &&           // false &&
    (s.charAt(0)=='0') &&     // false &&
    (s.charAt(0)=='7') ||     // false ||
    (s.charAt(0)=='9') ||     // false || 
    (s.charAt(0)=='8')        // true 
)                             // equals true

应该是:

else if (length == 11 && s.charAt(0) == '0' && (s.charAt(1) == '7' || s.charAt(1) == '9' || s.charAt(1) == '8'))

第三个条件应该是:

else if (length == 12 && s.charAt(0) == '9' && s.charAt(1) == '1' && (s.charAt(2) == '7' || s.charAt(2) == '9' || s.charAt(2) == '8'))

答案 1 :(得分:-3)

您错过了整个()

else if((length==12) &&((s.charAt(0)=='9')&&(s.charAt(1)=='1')))