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

Java 开始时不考虑零的字符串长度,java,Java,我试着回答以下问题。我需要找到整数的长度,所以我把它转换成字符串,我可以得到所有数字的输出,除了以零开始的数字。我只能通过三个测试用例中的一个。我无法找出代码中的其他错误 代码: }假设前导零必须是输入的一部分,则根本不应转换为int。只需解析字符串即可提取数字 Scanner sc = new Scanner(System.in); String input = sc.nextLine(): if (input.length() != 3) { throw new IllegalAr

我试着回答以下问题。我需要找到整数的长度,所以我把它转换成字符串,我可以得到所有数字的输出,除了以零开始的数字。我只能通过三个测试用例中的一个。我无法找出代码中的其他错误

代码:


}

假设前导零必须是输入的一部分,则根本不应转换为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");

假设前导零必须是输入的一部分,则不应转换为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");

考虑这个问题的另一种方法是使用字符串索引获取数字。当幸运数字的定义变为第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

考虑这个问题的另一种方法是使用字符串索引获取数字。当幸运数字的定义变为第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

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

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

如果它确实匹配,那么您就知道您有一个长度为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");
        }
    }
}

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

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

如果它确实匹配,那么您就知道您有一个长度为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");
        }
    }
}


也许您可以重新格式化您的代码片段,使其更易于阅读。您面临什么错误?另外,为了更好的阅读和理解,请编辑这个问题。我不认为我理解你的问题。如果输入是022,输出应该是什么?0242? 我相信
sc.nextInt()
永远不会告诉您是否有前导零,因此您可能需要寻找另一种输入法。Java有通用的命名约定。阅读、理解和应用它们不会伤害您&它肯定会提高代码的可读性。:)请不要因为诸如糟糕的代码格式之类的问题而否决这个问题。人们不会问问题,因为他们已经知道了一切……也许你可以重新格式化你的代码片段,使其更易于阅读。你面临什么错误?另外,为了更好的阅读和理解,请编辑这个问题。我不认为我理解你的问题。如果输入是022,输出应该是什么?0242? 我相信
sc.nextInt()
永远不会告诉您是否有前导零,因此您可能需要寻找另一种输入法。Java有通用的命名约定。阅读、理解和应用它们不会伤害您&它肯定会提高代码的可读性。:)请不要因为诸如糟糕的代码格式之类的问题而否决这个问题。人们不会问问题,因为他们已经知道了所有的事情…更多的是与数字打交道,尤其是当你只有整数的时候。当然,Math.log10是有效的!这并不能解决你的问题。处理数字需要更多的时间,特别是当你只有整数的时候。当然,Math.log10是有效的!这并不能解决您的问题。您的代码永远不会输出“无效输入”。以零开头的幸运数字将失败,就像OP的代码一样。最后一个谜语是,如果输入不是数字,代码将不会打印任何内容。@Valentin修复了它。您的代码将永远不会输出“无效输入”。以零开头的幸运数字将失败,就像OP的代码一样。最后一个谜语是,如果输入的不是数字,代码将不会打印任何内容。@Valentin修复了它