码迷,mamicode.com
首页 > 其他好文 > 详细

小作业之测试篇

时间:2015-04-02 20:34:42      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:

实验要求:

要求程序必须能处理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]+"\t");
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]+"\t");
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("\n本数组中子数组和最大的为:"+p);
68         System.out.println("这个子数组是:");
69         for(i=0;i<q+1;i++)
70         {
71             System.out.print(a[r+i]+"\t");
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对象相互转换。

总结:

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

成员:

刘双渤,刘洪阳

成员照:

技术分享

小作业之测试篇

标签:

原文地址:http://www.cnblogs.com/little-clever/p/4387494.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!