- package day16;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.util.ArrayList;
- import java.util.Iterator;
- import java.util.List;
- /*
- * 需求:
- * 设计一个程序是求9999以内的“自身数”,并打印出其所有约数。所谓自身数是指这样的自然数:它的各个约数(不包括该数自身)之和等于该数自身。
- * 如28=1+2+4+7+14就是一个完全数。要求:打印需满足以下格式。
- *
- * A:约数1 约数2 约数3...... 例如 6: 1 2 3
- * B:约数1 约数2 约数3...... 28: 1 2 4 7 14
- * C:约数1 约数2 约数3...... 496: 1 2 4 8 16 31 62 124 248
- *
- 逻辑分析:
-
- 1.首先要知道该数字的约数是哪几个数字
- 2.做一次判断,判断约数之和是否为这个数字本身.若是,打印
- 功能分析:
- 1.新建一个类,此类中共有3个私有方法.和一个公共方法
- 2.方法1用来获取用户输入的数字.
- 2.1用正则判断该数字是否符合标准,若为否,则提示用户重新输入
- 3.方法2用来获取该数字的所有约数,并存入集合
- 3.1可以让该数%2,%3,%4,依次类推,若为零,则往集合添加.
- 4.方法3用来迭代集合求和
- 5.方法4对外提供以上所有方法
- */
- public class ActTest2 {
- public static void main(String[] args) {
- getNum get = new getNum();
- get.run();
- }
- }
- class getNum {
- public void run(){
- showUnum(GetList(GetNum()), num);
- }
-
- private int num = 0;
-
- private int GetNum() {
- BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
- String buf = null;
- String regex = "[1-9][0-9]{0,3}";
- try {
- System.out.println("请输入一个数字");
- while ((buf = br.readLine()) != null) {
- if(buf.matches(regex))
- return num = Integer.parseInt(buf);
- System.out.println("输入了一个非法数字,请重新输入");
- }
- } catch (Exception e) {
- // TODO Auto-generated catch block
- System.out.println("发生了一个错误,请检查");
- }
- finally{
- try {
- br.close();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- System.out.println("关闭流失败");
- }
- }
- return -1;
- }
- private List GetList(int num){
- List list = new ArrayList();
- int temp = num - 1;
- while(temp > 0){
- if(num%temp == 0)
- list.add(temp);
- temp--;
- }
- return list;
- }
- private void showUnum(List list,int num){
- Iterator it = list.iterator();
- int temp = 0;
- int buf = 0;
- String str = "";
- String buff = "";
- while(it.hasNext()){
- buf = (int)it.next();
- temp = temp + buf;
- str = str+buf+"*";
- }
- str = str.substring(0, str.length()-1)+"="+num;
- System.out.println(str);
- if(temp == num)
- System.out.println(num+"是一个自身数");
- else
- System.out.println(num+"不是一个自身数");
- }
- }
复制代码 |