java编程题之水仙花数
来源:互联网 发布:通往天堂的钥匙淘宝网 编辑:程序博客网 时间:2024/05/18 16:38
通过面向对象对水仙花的处理—-对象封装
- 用户操作类UserShuiXianHua.java
package com.ucai.question.shuixianhua;/** * 用户操作类,相当于客户端 * @author facebook * */public class UserShuiXianHua { public static void main(String[] args) { //创建水仙花具体操作的类对象 ShuiXianHua shui = new ShuiXianHua(); //具体实现的类方法 shui.panduan(); }}
- 水仙花具体操作类ShuiXianHua.java
package com.ucai.question.shuixianhua;import java.util.Scanner;import com.ucai.check.RegExpValidatorUtils;/** * 通过面向对象做水仙花的输出 * * 情况一:当用户选择判断一个数字是不是水仙花数的选项的时候,调用判断水仙花的相应功能 * 情况二:当用户选择遍历某个范围的水仙花数的选项的时候,调用相应的封装功能 * * @author facebook * */public final class ShuiXianHua { /** * 客户端入口,相当于程序的入口,只有该方法提供给用户 * 用户通过选项,执行不同程序操作 * 选项:1判断水仙花数,2遍历某区间内水仙花数 * 当用户选择1,进入判断用户输入的数字是否是水仙花数 * 当用户选择2,进入遍历用户输入的一个区间,打印出该区间类的所有水仙花数 */ @SuppressWarnings("resource") public void panduan() { System.out.println("选项:\n1:判断水仙花数,\n2:遍历某区间内水仙花数"); System.out.println("请给出你的选择:"); Scanner sc = new Scanner(System.in); String str = ""; outer: while (true) { str = sc.next(); if (!RegExpValidatorUtils.IsIntNumber(str) || str.length() > 1) { System.out.println("没有选项" + str + ",请重新选择!"); continue; } switch (str) { case "1": if (!shuixianhua()) { break outer; } break; case "2": if (!shuixianhuas()) { break outer; } break; } } } /** * 根据输入的数字判断是否是水仙花数 * * @return */ @SuppressWarnings("resource") private boolean shuixianhua() { Scanner sc = new Scanner(System.in); String str = ""; System.out.println("请输入需要判断是否为水仙花数的数字:\n退出程序:exit\n返回上一层:return\n\n客户输入需要判断的数字:"); while (true) { str = sc.next(); if ("exit".equals(str.trim())) { System.out.println("退出程序成功!"); return false; } if ("return".equals(str.trim())) { System.out.println("返回上一层!"); panduan(); } if (!RegExpValidatorUtils.IsIntNumber(str) && !"exit".equals(str.trim())) { System.out.println("请输入一个一位或多位的数字!"); continue; } checkShuixianhua(str); } } /** * 检测输入的数字是否是水仙花数 * @param str */ private void checkShuixianhua(String str){ StringBuilder sbsum = new StringBuilder(); long sum = 0; for (int i = 0; i < str.length(); i++) { double k = Double.parseDouble(String.valueOf(str.charAt(i))); sbsum.append(Math.round(k) + "^3 + "); sum += Math.pow(k, 3); } sbsum.delete(sbsum.lastIndexOf("+"), sbsum.length()); StringBuilder sb = new StringBuilder(str); if (Double.parseDouble(str) == sum) { sb.append(" = ").append(sbsum).append(",因此, ").append(str); sb.append("是"); } else { sb.append(" != ").append(sbsum).append(",因此, ").append(str); sb.append("不是"); } sb.append("水仙花数"); System.out.println(sb); } /** * 根据用户输入的范围,遍历出所有的水仙花数 * * @return */ @SuppressWarnings("resource") private boolean shuixianhuas() { Scanner sc = new Scanner(System.in); String str = ""; System.out.println("请输入需要查找水仙花数的区间(输入区间格式:1~1000):\n退出程序:exit\n返回上一层:return\n\n客户需要查询的区间:"); while(true){ str = sc.next(); if ("exit".equals(str.trim())) { System.out.println("退出程序成功!"); return false; } if ("return".equals(str.trim())) { System.out.println("返回上一层!"); panduan(); } if(!checkFormat(str)){ System.out.println("请按照格式输入区间"); continue; } String[] strs = str.split("~"); shuixianhua(Long.parseLong(strs[0]),Long.parseLong(strs[1])); continue; } } /** * 遍历在规定区间内的所有水仙花数 * @param start * @param end */ private void shuixianhua(long start,long end){ System.out.println(start+"~"+end+"之间的所有水仙花数:"); for(;start<end;start++){ String st = shuixianhua(String.valueOf(start)); if(st!=null){ System.out.print(st+" "); } else{ System.out.println("抱歉,该区间内没有水仙花数!"); break; } } } /** * 经过判断传入的数字是否为水仙花数, * 如果是,则返回这个数,如果不是,则返回null * @param str * @return */ private String shuixianhua(String str){ long strInt = Long.parseLong(str); long sum=0; for(int i=0;i<str.length();i++){ double k = Double.parseDouble(String.valueOf(str.charAt(i))); sum+=Math.round(Math.pow(k, 3)); } if(strInt==sum){ return str; } return null; } /** * 匹配输入的水仙花区间的格式 * 1~1000 * @param str * @return */ private static boolean checkFormat(String str) { String regex = "^(\\d+~)(\\d+)$"; return str.matches(regex); }}
阅读全文
0 0
- java编程题之水仙花数
- Java编程之水仙花数
- Java基础编程之打印水仙花数
- Java编程_水仙花数
- java学习之水仙花数
- Java算法之“水仙花数”
- 非常经典的JAVA编程题(水仙花数)
- c编程之求出水仙花数
- Java基础编程3:水仙花数
- 【Java笔试题】水仙花数
- java经典五十道题之2水仙花数问题
- java基础算法之水仙花数
- java--for循环之水仙花数问题
- 编程小题3→水仙花数
- 【编程练习】水仙花数
- Java杂谈之二----怎样判断一个数是水仙花数以及穷举水仙花数
- c# 之 水仙花数
- ACM之水仙花数
- EditText如何在使用数字键盘的情况下输入多个小数点
- C# 保存表格数据到Excel
- 网络接口层
- JAVA读取数据库中的经纬度标定到高德地图上
- 浪潮之巅读后摘录
- java编程题之水仙花数
- composer安装(ubuntu centos 实验过)
- Linux class 类接口的使用
- 【深度学习】梯度下降和反向传播
- 关于BroadCast,startActivityForResult以及EventBus
- Java之反射
- eclipse启动tomcat时遇到超时45秒的解决办法
- AfxGetInternetHandleType
- log4j2 使用详解