字符串的长度在开始时不考虑零

时间:2016-05-17 08:19:29

标签: java

我正在尝试以下问题。我需要找到整数位的长度,所以我把它转换成字符串,我能够得到所有数字的输出,除了以零开头的数字。我只能通过三个测试用例。我无法弄清楚我的代码中还有什么问题。

代码:

import java.util.*;

class Test {

public static void main(String []args) {
    int no;
    int sum;

    Scanner sc=new Scanner(System.in);
    no = sc.nextInt();

    String x=Integer.toString(no);

    int len=x.length();

    int lno=no%10;   //3rd digit
    int fno=no;      //first digit
    int mno=(no/10)%10;   //middle digit

    while(fno>=10) {
        fno/=10;    
    }

    sum=fno+lno;

    if(len!=3) {
        System.out.print("Invalid Input\n");

    } else {
        if(sum==mno) {
            System.out.print("Lucky Number\n");

        } else {
            System.out.print("Not A Lucky Number\n");
        }
    }
}

}

3 个答案:

答案 0 :(得分:3)

为什么不使用next(Pattern)中提供的Scanner方法?

然后您可以使用正则表达式匹配3位数字,如果它不匹配,它将抛出InputMismatchException,您可以捕获并输出无效输入

如果确实匹配,那么您知道长度为String的长度为3,然后您可以将每个字符作为单个数字使用。将第一个和最后一个索引一起添加,看它是否等于第二个索引。

public static void main(String[] args) throws IOException {

    try (Scanner scan = new Scanner(System.in)) {

        try {
            String number = scan.next(Pattern.compile("\\d{3}"));

            int i = Integer.parseInt("" + number.charAt(0));
            int j = Integer.parseInt("" + number.charAt(1));
            int k = Integer.parseInt("" + number.charAt(2));

            if ((i + k) == j) {
                System.out.println("Lucky Number");
            } else {
                System.out.println("Not A Lucky Number");
            }
        } catch (InputMismatchException e) {
            System.out.println("Invalid Input");
        }
    }
}

答案 1 :(得分:2)

假设前导零必须是输入的一部分,则根本不应转换为int。只需解析字符串以提取数字。

Scanner sc = new Scanner(System.in);
String input = sc.nextLine():

if (input.length() != 3) {
    throw new IllegalArgumentException("Invalid input");
}

int first = Integer.parseInt(input.substring(0, 1));
int second = Integer.parseInt(input.substring(1, 2));
int third = Integer.parseInt(input.substring(2, 3));

if (first + third != second) {
    System.out.print("Not a ");
}
System.out.println("Lucky Number");

答案 2 :(得分:1)

考虑该问题的另一种方法是使用字符串索引获取数字。当幸运数字的定义变为第1和第8位数之和时,这种方法会很有用。

以下是一个示例:

import java.util.*;

class Test
{
    public static void main(String []args)
    {
        Scanner sc=new Scanner(System.in);
        String no=sc.nextLine();

        if(no.matches("^[0-9]+$"))
        {
            if(no.length()!=3)
                System.out.println("Not a Valid Input");
            else if(no.length()==3 && (Character.getNumericValue(no.charAt(0))+Character.getNumericValue(no.charAt(2)))==Character.getNumericValue(no.charAt(1)))
                System.out.println("Lucky Number");
            else
                System.out.println("Not A Lucky Number");
        }else
            System.out.println("Not a number");
    }
}

这是输出:

$ javac Test.java 
$ java Test
165
Lucky Number
$ java Test
022
Lucky Number
$ java Test
145
Not A Lucky Number
$ java Test
12
Not a Valid Input