Facebook Sharer
选择您要替换的背景颜色:
【农历新年】背景图片:
个性化设定
 注册  找回密码
查看: 1041|回复: 11
打印 上一主题 下一主题

JAVA问题 请各位高手来看看并给与帮助

[复制链接]

9

主题

11

好友

303

积分

超级会员

Rank: 5Rank: 5Rank: 5Rank: 5Rank: 5

跳转到指定楼层
1#
发表于 2014-10-6 02:09 AM |只看该作者 |倒序浏览
这是assignment来的
我要写一个可以算perfect number, excessive number和defective number的program
可是遇到一个问题
就是我list出所有factors以后
还要把factors加起来(sum of divisors/factors)
这个地方,我不会写。
各位高手教教我好吗 谢谢
以下是我的coding....

import java.util.*;
public class Numbers {

        public static void main(String[]args){
        System.out.println("Enter any number");
        Scanner input =new Scanner(System.in);
        int num = input.nextInt();
        int perfectNum=0;
        int x;
        
        while (true)
        {
            try
            {
                    if( num >= 6 && num<= 1000)
                {
                        System.out.println("Factors are:");
                    for(x = 1; x < num; x++)
                    {
                            if(num % x == 0)
                            {
                                    perfectNum = perfectNum + x;
                                    System.out.println(x);
                            }
                    }
                   if(perfectNum==num)
                   {
                        System.out.println("This number is a perfect number.");
                   }
                   if(perfectNum>num)
                   {
                                   System.out.println("This number is an excessive number.");
                   }
                   if(perfectNum<num)
                   {
                                   System.out.println("This number is a defective number.");
                   }
                }
               else
               {
                       System.out.println("It is not a valid number. Please reenter a number that is in the range of 6 to 1000.");
               }
                num = input.nextInt();
   
            }
            catch (InputMismatchException e)
            {
               System.out.println("You did not enter an integer.");
               input.nextLine();
            }
        }
      }
}




收藏收藏0

6

主题

1

好友

1943

积分

白银长老

Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

2#
发表于 2014-10-6 03:15 AM |只看该作者
本帖最后由 htuomrev 于 2014-10-6 03:23 AM 编辑

你必须用一个array或者list来记录factor,我按照你的题目写了一个example。
我把各个步骤都分开,分成了几个method,
整个过程被拆解成:getFactors(int) -> sumOfFactors(list) -> printResult(int, int)
以下为code:
  1. import java.util.*;

  2. public class Number {

  3.         public static void main(String[] args) {
  4.        
  5.                 // Fast Test (Delete it if u dont wan fast preview)
  6.                 for (int i=6;i<=100;i++) {
  7.                         List<Integer> factors = getFactors(i);
  8.                         printResult(sumOfFactors(factors), i);
  9.                 }
  10.                 System.out.println();
  11.                 // Fast Test End
  12.        
  13.                 Scanner in = new Scanner(System.in);
  14.                 while (true) {
  15.                         System.out.println("Enter a number,x which  6 <= x <= 1000");
  16.                         try {
  17.                                 int input = in.nextInt();
  18.                                 if (inputError(input)) {
  19.                                         System.out.println("Input Range Error!");
  20.                                         System.out.println();
  21.                                         continue;
  22.                                 }
  23.                                 List<Integer> factors = getFactors(input);
  24.                                 printFactors(factors);
  25.                                 int sum = sumOfFactors(factors);
  26.                                 printResult(sum, input);
  27.                                 System.out.println();
  28.                         } catch (InputMismatchException e) {
  29.                                 in.next(); // prevent repeat reading
  30.                                 System.out.println("Input Type Error!");
  31.                                 System.out.println();
  32.                                 continue;
  33.                         }
  34.                 }
  35.         }
  36.        
  37.         private static boolean inputError(int input) {
  38.                 if (input < 6 || input > 1000) return true;
  39.                 return false;
  40.         }
  41.        
  42.         private static List<Integer> getFactors(int n) {
  43.                 List<Integer> factors = new ArrayList<Integer>(0);
  44.                 factors.add(1);
  45.                 factors.add(n);
  46.                 for (int i=2;i<n/2;i++) {
  47.                         if (n % i == 0) {
  48.                                 if (factors.indexOf(i) < 0)
  49.                                         factors.add(i);
  50.                                 if (factors.indexOf(n/i) < 0)
  51.                                         factors.add(n/i);
  52.                         }
  53.                 }
  54.                 return factors;
  55.         }
  56.        
  57.         private static void printFactors(List<Integer> factors) {
  58.                 System.out.print("Factors: ");
  59.                 for (Integer factor : factors) {
  60.                         System.out.print(factor + " ");
  61.                 }
  62.                 System.out.println("");
  63.         }
  64.        
  65.         private static int sumOfFactors(List<Integer> factors) {
  66.                 int sum = 0;
  67.                 for (Integer factor : factors)
  68.                         sum += factor;
  69.                 return sum;
  70.         }
  71.        
  72.         private static void printResult(int sum, int input) {
  73.                 if (sum - input == input) {
  74.                         System.out.printf("%4d is Perfect Number!\n", input);
  75.                 } else if (sum - input > input) {
  76.                         System.out.printf("%4d is Excessive Number!\n", input);
  77.                 } else {
  78.                         System.out.printf("%4d is Defective Number!\n", input);
  79.                 }
  80.         }

  81. }
复制代码


回复

使用道具 举报

19

主题

3

好友

962

积分

青铜长老

Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7

3#
发表于 2014-10-6 01:23 PM |只看该作者
楼上答案是你要的吗


回复

使用道具 举报

9

主题

11

好友

303

积分

超级会员

Rank: 5Rank: 5Rank: 5Rank: 5Rank: 5

4#
发表于 2014-10-7 09:29 AM |只看该作者
htuomrev 发表于 2014-10-6 03:15 AM
你必须用一个array或者list来记录factor,我按照你的题目写了一个example。
我把各个步骤都分开,分成了几 ...

我run了你的code
可是如果我不要一开始就把所有numbers和type of numbers都list出来呢?


回复

使用道具 举报

9

主题

11

好友

303

积分

超级会员

Rank: 5Rank: 5Rank: 5Rank: 5Rank: 5

5#
发表于 2014-10-7 09:49 AM |只看该作者
htuomrev 发表于 2014-10-6 03:15 AM
你必须用一个array或者list来记录factor,我按照你的题目写了一个example。
我把各个步骤都分开,分成了几 ...

I understand ur code d, but then the sum of factors seems not coming out.
And how do I arrange the factors in ascending order?
sorry i'm using school pc so i can't type chinese....


回复

使用道具 举报

6

主题

1

好友

1943

积分

白银长老

Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

6#
发表于 2014-10-7 12:07 PM |只看该作者
jayte2168 发表于 2014-10-7 09:49 AM
I understand ur code d, but then the sum of factors seems not coming out.
And how do I arrange th ...

你自己print out一下factors总数不是好了嘛 ==
  1. int sum = sumOfFactors(factors);
  2. System.out.printf("Sum of factors: %d", sum);
复制代码
添加一个新的method:
  1.         private static List<Integer> sortFactors(List<Integer> factors) {
  2.                 Comparator c = new Comparator() {
  3.                         public int compare(Object arg0, Object arg1) {
  4.                                 return ((Integer)arg0).compareTo((Integer)arg1);
  5.                         }
  6.                 };
  7.                 Collections.sort(factors, c);
  8.                 return factors;
  9.         }
复制代码
然后在 getFactors 里的:
  1.                 return factors;
复制代码
之前添加成为:
  1.                 factors = sortFactors(factors);
  2.                 return factors;
复制代码
其实你的这两个要求非常的简单,是编程基础必须自己理解的一种,加油吧,你可以先研究一下 List 的用法,java provide 这个 class 就是为了方便。


回复

使用道具 举报

9

主题

11

好友

303

积分

超级会员

Rank: 5Rank: 5Rank: 5Rank: 5Rank: 5

7#
发表于 2014-10-7 05:41 PM |只看该作者
array和list剛學不久 還不是了解用法 對不起啊 哈哈哈 謝謝你 我試試自己再改一改 有問題再上來報到


回复

使用道具 举报

9

主题

11

好友

303

积分

超级会员

Rank: 5Rank: 5Rank: 5Rank: 5Rank: 5

8#
发表于 2014-10-8 10:12 AM |只看该作者
htuomrev 发表于 2014-10-7 12:07 PM
你自己print out一下factors总数不是好了嘛 ==添加一个新的method:然后在 getFactors 里的:之前添加成为 ...

那个print factors总数的
int sum = sumOfFactors(factors);
System.out.printf("Sum of factors: %d", sum);

我paste进去了出现以下error:
Exception in thread "main" java.lang.StackOverflowError

是我放的位置错误还是什么呢?


回复

使用道具 举报

9

主题

11

好友

303

积分

超级会员

Rank: 5Rank: 5Rank: 5Rank: 5Rank: 5

9#
发表于 2014-10-8 10:47 AM |只看该作者
jayte2168 发表于 2014-10-7 05:41 PM
array和list剛學不久 還不是了解用法 對不起啊 哈哈哈 謝謝你 我試試自己再改一改 有問題再上來報到

刚才的问题解决了
可是sum of factors不能包括那个input的number
我想了半天还是不懂怎样改 请教一下好吗


回复

使用道具 举报

6

主题

1

好友

1943

积分

白银长老

Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

10#
发表于 2014-10-8 11:09 AM |只看该作者
为了方便和意义完整,factor我是包括input本身,如果sum of factor 不需要 input 本身,那:
  1. int sum = sumOfFactors(factors) - input;
复制代码
再减掉 input 的 value 就可以了。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

JBTALKS.CC |联系我们 |隐私政策 |Share

GMT+8, 2024-11-18 08:40 PM , Processed in 0.130771 second(s), 22 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

Ultra High-performance Dedicated Server powered by iCore Technology Sdn. Bhd.
Domain Registration | Web Hosting | Email Hosting | Forum Hosting | ECShop Hosting | Dedicated Server | Colocation Services
本论坛言论纯属发表者个人意见,与本论坛立场无关
Copyright © 2003-2012 JBTALKS.CC All Rights Reserved
合作联盟网站:
JBTALKS 马来西亚中文论坛 | JBTALKS我的空间 | ICORE TECHNOLOGY SDN. BHD.
回顶部