标题:两个JAVA的小程序希望有大神来解答
只看楼主
木叶长青
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2017-12-6
 问题点数:0 回复次数:4 
两个JAVA的小程序希望有大神来解答
假设n!小于等于int类型的最大值,(n+1)!大于int类型的最大值,请编写程序计算n的值并打印出来。
类 Integer 的 MAX_VALUE 属性,是一个常量,保存了int的最大值
搜索更多相关主题的帖子: JAVA int 类型 最大值 Integer 
2017-12-06 16:55
疯狂的小a
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:39
帖 子:423
专家分:1871
注 册:2018-2-6
得分:0 
package com.demo.domain;

public class JieChen {
    public static void main(String[] args) {
        //int类型的最大数
        int maxIntValue = Integer.MAX_VALUE;//2147483647
        //int maxIntValue = 120*6*7*8*9*10*11*12*13*14*15*16;
        System.out.println(maxIntValue);
        
        //调用方法,查找n值,n的阶乘等于maxIntValue
        //因为是int类型的边界运算,所以需要转double类型
        int n = findNumber(Double.parseDouble(maxIntValue+""));
        System.out.println(n);
    }

    private static int findNumber(Double maxIntValue) {
        //定义一个变量n,n的阶乘等于maxIntValue
        int n;
        //定义一个循环,如果n的阶乘小于maxIntValue,就加1,否则返回n
        for(int i=0;;i++){
            if(jieChen(i)<maxIntValue){
                continue;
            }else{
                n = i;
                break;
            }
        }
        return n;
    }
    //计算n的阶乘
    private static double jieChen(int n) {
        double result;
        if(n>1){
            result = n*jieChen(n-1);
        }else {
            result=1;
        }
        return result;
    }
}

假如人生没有梦想,和咸鱼有什么区别!
2018-02-06 15:20
梦月神游
Rank: 2
来 自:灵界-异空间
等 级:论坛游民
威 望:4
帖 子:23
专家分:98
注 册:2017-3-11
得分:0 
最近开始重新学习java,看了二楼大神那时回帖似乎是刚接触java不久,于是我就写了段看得过去的java代码,仅供参考。

其实,求n的阶int乘临界值处理可以不必转换double处理,直接用测试数据做除法处理可以避免越界(具体看代码),相信看的时间长一点都可以理解的。

首先先附上工程框架图示:







程序代码:
package cn.demo;

import cn.exception.*;
import cn.exception.customException.*;

public class Test 
{
    public Test()
    {
        int i;
        for (i=1;i<Integer.MAX_VALUE/10;i*=10)
                testMain(i);
        
        testMain(Integer.MAX_VALUE);
    }
    
    public void testMain(int n) 
    {
        int result;
        try
        {
            System.out.println("测试数据:"+n);
            
            result=test(n);
            System.out.println("运行结果为:"+result+"\n");
        }
        catch(CustomException e)
        {
            System.out.println(e.message+"\n");
        }
            
    }
    
    private static int test(int testNum) throws IntegerException
    {
        int n=1;
        int count=1;
        
        if (testNum<0)
            throw new IntegerException();
        
        while (testNum/n>=count+1)
            n*=++count;
        
        return count;
    }
    
    public static void main(String[] arge)
    {
        new Test();
    }
}


程序代码:
package cn.exception.customException;

//自定义异常类
public abstract class CustomException extends Exception
{
    public String message;

    public String toString()
    {
        return message;
    }
}


程序代码:
package cn.exception;

import cn.exception.customException.*;

public final class IntegerException extends CustomException
{
    public final IntegerException()
    {
        super.message="测试数据不能小于0";
    }
}


附上运行效果图:最后算出来的结果是12




后记:其实这一行代码可以用很简洁的方法完成,关键是加入了对于测试数据是否小于0的自定义异常处理,虽然看上去不太重要,但其中重要的是设计理念以及编程细节习惯,所以写写还是有一定必要的。
当然还有工程框架结构也是重要部分,也是写框架结构的基础能力,看见这个论坛基于平台原因通常看到的帖子就只有一个自定义包。其实,将来做数据库设计那些项目的时候框架设计就很重要了。当然,这些一般比较简单的小程序处理还是这还是见仁见智吧,到底方便阅读还是挺重要的。


[此贴子已经被作者于2018-3-17 16:18编辑过]

2018-03-17 16:13
疯狂的小a
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:39
帖 子:423
专家分:1871
注 册:2018-2-6
得分:0 
我相信,是人写的代码就会有bug
程序代码:
package com.xiaoa.demo;

public class Integer {

    public static final int MAX_VALUE = 0;

}

程序代码:
package com.xiaoa.demo;

public class Test {
    public Test() {
        int i;
        for (i = 1; i < Integer.MAX_VALUE / 10; i *= 10)
            testMain(i);

        testMain(Integer.MAX_VALUE);
    }

    public void testMain(int n) {
        int result;
        try {
            System.out.println("测试数据:" + n);

            result = test(n);
            System.out.println("运行结果为:" + result + "\n");
        } catch (CustomException e) {
            System.out.println(e.message + "\n");
        }

    }

    private static int test(int testNum) throws IntegerException {
        int n = 1;
        int count = 1;

        if (testNum < 0)
            throw new IntegerException();

        while (testNum / n >= count + 1)
            n *= ++count;

        return count;
    }

    public static void main(String[] arge) {
        new Test();
    }
}

//自定义异常类
abstract class CustomException extends Exception
{
  public String message;

  public String toString()
  {
      return message;
  }
}

final class IntegerException extends CustomException
{
    public IntegerException()
    {
        super.message="测试数据不能小于0";
    }
}




[此贴子已经被作者于2018-3-17 19:14编辑过]


假如人生没有梦想,和咸鱼有什么区别!
2018-03-17 18:17
梦月神游
Rank: 2
来 自:灵界-异空间
等 级:论坛游民
威 望:4
帖 子:23
专家分:98
注 册:2017-3-11
得分:0 
回复 4楼 疯狂的小a
是没有考虑0的情况,这题按常理来说0应该是无解的,要另外处理或者把0划分为异常数据就可以了。毕竟我还有很多没有学到位,目前还要看框架结构,所以才拿这题来熟悉一下基本流程,看了你的代码还是可以收获很多东西的
2018-03-17 19:26



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-483167-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.591451 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved