• 小作业之测试篇


    实验要求:

    要求程序必须能处理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对象相互转换。

    总结:

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

    成员:

    刘双渤,刘洪阳

    成员照:

  • 相关阅读:
    ubuntu下安装pip
    [算法]获得最短路径的Floyd与Dijkstra算法
    win2003终端服务授权
    Cookie 读取,解决中文乱码
    MOSS自动备份
    MOSS 开发收藏
    Private Protect Partial Internal Public 区别
    怎么设置OUTLOOK接收邮件时,网站邮箱的原始文件也保存着?
    正则表达式实战
    SQL Server 2005 数据库用户和登录帐户设置关链
  • 原文地址:https://www.cnblogs.com/little-clever/p/4387494.html
Copyright © 2020-2023  润新知