java练习题:数字位数
在之前写了6:java学习笔记:for循环与if条件语句的结合-CSDN博客
水仙花数 是只有三位数的,通过三次for循环的嵌套来进行,然后使用 if条件语句的结合 来进行判断的。
但是如果没有前置条件,只告诉你输入一个数字判断是不是水仙花数,那么这个题目的算法就要进行改变了。
写一段代码,基本上分为三个步骤,分别是 用户交互部分(输入(本质上是数据获取,可以是用户输入,也可以是很多表格数据等等),输出(可以是单纯的输出,也可以是数据库写入等等都属于这个范畴),同样还有渲染之类的现在并不考虑),算法部分(有些代码是用来业务逻辑/数据处理等等的)与异常捕获部分
所以现在的算法应该改变了
先进行用户交互的部分
这个是导图,用户交互中可以分为 输入,输出,渲染,接口调用等等,后面两个在本例子中不需要使用,在输入中,在本例子中是需要用户直接输入的,不是通过文件/网络等等输入的,所以直接使用scanner直接输入就可以了。
然后在输出中在这个例子中只需要显示出结果让用户清楚就可以,所以有两种输出,第一种是是水仙花数,第二是不是水仙花数。
这里有分类讨论,所以需要使用到if条件语句。
难点:随机输入一个数字需要知道是几位数,还要提取出来
这个是算法部分的(主体部分)
通过num(用户输入的)%10 获得位数,通过位数三次方,得到第一个,然后呢num/10,去掉个位数,循环之后得到sum就是每一位三次方的总和 如果能等于数字本身,那么就是水仙花数,如果不行的,那么就不是水仙花数。
基本的难点就已经完结了
但是在三位数中式三次方,四位数就是四次方,这个是第二个难点,不知道位数
那么最后就是异常捕获,思考一下可能产生的异常有
这三个。
第一个异常
第二个异常
第三个异常
这三种类型的异常
最后的代码是
import java.util.Scanner;
public class s1 {public static void main(String[] args) {// TODO Auto-generated method stubScanner input = new Scanner(System.in);System.out.println("请输入一个数字");//用户交互,基本输入double sum = 0;if(input.hasNextInt()) {//异常捕获2,不能是小数int number = input.nextInt();int num4= number;//因为要用到两次 最后需要比较的时候,需要保护一下int num3 =number;int i =0; //记录到底有几位数字if(number<0) {//异常捕获1 如果是负数怎么办呢,如果是负数,直接退出程序!!System.out.println("负数不会是水仙花数的");return;}while(number>0) {//问题2的解决i++;number= number/10;}while(num4>0) {//最重要的算法,并且是循环模块 问题1的解决 int num = num4%10;sum+=Math.pow(num,i);num4 = num4 / 10;}System.out.println(sum);if(sum==num3) {//因为需要分类讨论,所以使用if条件语句,用户交互,直接打印结果System.out.println("是水仙花数");}else {System.out.println("不是水仙花数");}}}}
导图的链接在。
HeptabaseCreate visual playgrounds for your notes.https://app.heptabase.com/w/d0a628a46a5385f87b292bfbcf1335152bf105eea5bc7417c3a122528e46449c