【问题标题】:Whаt is happening here?这里发生了什么?
【发布时间】:2019-10-29 07:31:32
【问题描述】:

有效印度手机号码规则:

号码应包含 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");
     }
     }
}

【问题讨论】:

  • 使用regex 验证手机号码。
  • 是的,我可以使用它,但我想知道这里发生了什么。 @MushifAliNawaz
  • 你为什么要循环播放?
  • (s.charAt(0)=='0')&&(s.charAt(0)=='7') 这个条件可以评估为true吗?
  • "如果它包含 11 个数字,那么第一个数字应该是 0,然后遵循第二个规则。" - 这不是说first 字符应该是0,而second 应该是7、8 或9?这意味着 (s.charAt(0)=='0')&&(s.charAt(0)=='7')||... 应该是 (s.charAt(0)=='0')&&((s.charAt(1)=='7' )||...) (检查索引 1 处的字符是否为 7、8 或 9 - 请注意我在“或”序列中添加了括号)

标签: java string logical-operators


【解决方案1】:

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

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

你会明白为什么如果你安排它如下:

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

【讨论】:

    【解决方案2】:

    你错过了一个完整的()

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

    【讨论】:

    • 使用&&时不计量。除了if 之外的所有括号都是多余的。
    猜你喜欢
    • 2021-08-04
    • 1970-01-01
    • 2013-11-03
    • 1970-01-01
    • 2010-12-14
    • 2017-11-14
    • 1970-01-01
    • 2018-04-02
    相关资源
    最近更新 更多