萌萌哒的小虎崽 发表于 2020-4-21 14:08:21

Java萌新问题,求大佬解答

在这里我要写的是关于翻转从键盘输入的一个三位数的小程序,现在遇到的问题是,当我输入不符合判断语句的数字时,它会让我继续输入,然后问题来了----当我输入一个符合判断语句的数字时,前边我输入的不符合的数字也得到了翻转并打印了出来,想知道这是为啥?import java.util.Scanner;

public class TurnNum {
       
        public TurnNum() {
        }
       
       
        public void turnAround() {
               
                System.out.println("请输入一个三位数:");
               
                //获取用户从键盘输入的字符
                Scanner data = new Scanner(System.in);
                int n = data.nextInt();//判断是否为整数,如果不是会报错
               
                //对三位数进行判断
                if (n > 999 || n < 100) {
                        System.out.println("您输入的数不是三位数,请继续输入:");
                        turnAround();
                }
               
                //分别获取百、十、个位数字
                int hun = n / 100;
                int ten = (n - hun * 100) / 10;
                int ge = n - hun*100 - ten * 10;
               
                String s1 = "" + ge;
                String s2 = "" + ten;
                String s3 = "" + hun;
                System.out.println(s1 + s2 + s3);
        }
}

qiuyouzhi 发表于 2020-4-21 14:14:24

你把这个函数类型改为int,然后
在不符合条件时,调用完turnAround()后return 0;

萌萌哒的小虎崽 发表于 2020-4-21 14:23:55

qiuyouzhi 发表于 2020-4-21 14:14
你把这个函数类型改为int,然后
在不符合条件时,调用完turnAround()后return 0;

管用了诶,这是为啥呢?

倒戈卸甲 发表于 2020-4-21 14:25:17

你这个程序的逻辑是不正确的,比如说,你输入1000,在判断后再次调用这个程序,但是调用完成后又会继续执行if判断后面的代码。事实上,在输入的数字不是三位数时,应当仅让用户重新输入数字就行了,而不是重新调用程序。

qiuyouzhi 发表于 2020-4-21 14:26:32

萌萌哒的小虎崽 发表于 2020-4-21 14:23
管用了诶,这是为啥呢?

因为在你输入正确后,不会调用turnAround
然后内层的turnAround调用成功之后呢,
就会回到上一层调用这个turnAround的
函数,然后那个函数会继续运行(也就是翻转输入的数字)

sunrise085 发表于 2020-4-21 14:30:07

qiuyouzhi 发表于 2020-4-21 14:14
你把这个函数类型改为int,然后
在不符合条件时,调用完turnAround()后return 0;

不必修改函数返回值类型,返回值为void也可以有return语句
直接在if语句块中调用完turnAround()之后,写上return;就可以了

qiuyouzhi 发表于 2020-4-21 14:31:09

sunrise085 发表于 2020-4-21 14:30
不必修改函数返回值类型,返回值为void也可以有return语句
直接在if语句块中调用完turnAround()之后,写 ...

Oh,学习了~
那return null;是不是也可以?

sunrise085 发表于 2020-4-21 14:33:04

qiuyouzhi 发表于 2020-4-21 14:31
Oh,学习了~
那return null;是不是也可以?

好像不行。那样也是有返回值的。

qiuyouzhi 发表于 2020-4-21 14:33:22

sunrise085 发表于 2020-4-21 14:33
好像不行。那样也是有返回值的。

我去试试哈
好吧,确实不行

zwhe 发表于 2020-6-3 16:15:37

{:7_146:}
页: [1]
查看完整版本: Java萌新问题,求大佬解答