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