• 小作业之测试篇


    实验要求:

    要求程序必须能处理1000个元素

    每个元素是int32类型的,出现子数组之和大于整形表示的最大范围会出现什么情况

    代码:

     1 package 子数组更改;
     2 
     3 import java.util.Scanner;
     4 
     5 public class zsz {
     6 
     7     /**
     8      * @param args
     9      */
    10     public static void main(String[] args) {
    11         // TODO Auto-generated method stub
    12 
    13         Scanner A=new Scanner(System.in);
    14         System.out.println("请输入数组长度:");
    15         int n=A.nextInt();
    16         
    17         System.out.println("请输入数组数值范围:");
    18         int N=A.nextInt();
    19         int M=A.nextInt();
    20         int a[]=new int[n];
    21         int b[][]=new int[n][n];
    22         
    23         int i;
    24         System.out.println("数组为:");
    25         for(i=0;i<n;i++)
    26         {
    27             a[i]=N+(int)(Math.random()*(M-N));
    28             System.out.print(a[i]+"	");
    29         }
    30         System.out.println();
    31         
    32         int j,k=n,t;
    33         for(i=0;i<n;i++)
    34         {
    35             for(j=0;j<k;j++)
    36             {
    37                 for(t=j;t<j+i+1;t++)
    38                 {
    39                     b[i][j]+=a[t];
    40                 }
    41             }
    42             k--;
    43         }
    44         
    45         System.out.println("各子数组大小:");
    46         for(i=0;i<n;i++){
    47             for(j=0;j<n;j++){
    48                 System.out.print(b[i][j]+"	");
    49             }
    50             System.out.println();
    51         }
    52         
    53         int p=b[0][0];
    54         int q=0,r=0;
    55         for(i=0;i<n;i++)
    56         {
    57             for(j=0;j<n-i;j++)
    58             {
    59                 if(p<b[i][j])
    60                 {
    61                     p=b[i][j];
    62                     q=i;
    63                     r=j;
    64                 }
    65             }
    66         }
    67         System.out.println("
    本数组中子数组和最大的为:"+p);
    68         System.out.println("这个子数组是:");
    69         for(i=0;i<q+1;i++)
    70         {
    71             System.out.print(a[r+i]+"	");
    72         }
    73 
    74     }
    75 
    76 }
    View Code

    测试思路:

      固定取值范围为-1000~1000,分别测试100、200、500、1000个数据,再测试100个数据下,取值范围为99999999999999999和9999999999999999999的结果

    测试结果:

    100个数据:

    200个数据:

    500个数据:

    1000个数据:

    99999999999999999

    9999999999999999999

     

    出现的问题:

     当测试值的取值范围为9个9到10个9之间时无法输出结果。

    可能的解决方案:

      无法输出,肯定就是数值过大超过了定义结果的数据类型所能承载的数值范围。此程序中将所有数组均定义为int,int为32位有符号整数,范围为-231~231-1。

      解决的方法就好应该是在设计程序时就考虑好值的取值范围,让产生的值不超过定义数据类型的取值范围。过大的话我的目前想法的就是建立一个远超过产生值的取值范围的一维数组,再逐位从后向前赋在一维数组中,在对这个一维数组进行操作。搜索了很多,查到了一个bigdecimal 类型,用它来精确运算和大数的运算,可将int,float,double,long,和BigDecimal对象相互转换。

    总结:

      对于数据的测试要考虑全面,避免测试数据单调重复。

    成员:

    刘双渤,刘洪阳

    成员照:

  • 相关阅读:
    COM+帐户权限注意事项
    [转]MVC和MVP的一些思考
    让VS智能感知Nhibernate的映射文件
    C#中使用Ftp一例
    [源码共享]以前用Remoting写的一个小游戏:Network Bomb
    wxwidgets学习与使用备忘录三(烦恼与便捷解决方案篇)
    regsvr32简介
    cocos2dx for XNA
    使用wxformbuilder进行wxwidgets的快速开发
    wxwidgets学习与使用备忘录一(下载、安装、配置篇)
  • 原文地址:https://www.cnblogs.com/little-clever/p/4387494.html
Copyright © 2020-2023  润新知