首页 > 代码库 > 第二次作业+105032014037
第二次作业+105032014037
1、测试帖链接:http://www.cnblogs.com/ypzeng/p/6600986.html
2、测试人员提出的问题、发现的缺陷
测试人员提出的问题为:对不符合数据的要求的数据应进行处理,不能任由程序出错而放任不过,应以更为优化的界面给予视觉上的舒适感,还有对与一下代码
Scanner scana=new Scanner(System.in);
int a = scana.nextInt();
Scanner scanb=new Scanner(System.in);
int b = scanb.nextInt();
Scanner scanc=new Scanner(System.in);
int c = scanc.nextInt();
应对 scana scanb scanc 进行关闭,对所占用的资源进行关闭。
解答:
(1)已对不符合数据进行处理,将输入定义为String类型,再进行转换为int型是否判断正确,正确方进行下一步。应该把这个小程序当成一个完整的应用来看待,运行程序时不在非人为的情况下发生崩溃。
(2)界面舒适感在改过代码后应该会有所提高,谢谢提醒。
(3)在新代码中scana、scanb、scanc不做关闭处理,因为这三个输入放在do···while()里,如果关闭了,因为没有键盘输入,程序将不断的进行case:“1”。当程序进行人为的退出后,show()将停止执行,系统会退出,所以不进行处理。出于eclipse提醒,添加 @SuppressWarnings("resource")在show()前,让它阻止这个提醒。鉴于学艺不精,可能这个回答不是很令人满意,请见谅。
3、修正后的代码清单
1 package TSort; 2 public class Client { 3 public static void main(String args[]) throws Exception{ 4 new Menu(); 5 } 6 }
1 package TSort; 2 import java.util.Scanner; 3 public class Menu { 4 private static Scanner in = new Scanner(System.in); 5 public Menu() throws Exception 6 { 7 while(true){ 8 this.show(); 9 } 10 } 11 @SuppressWarnings("resource") 12 public void show() throws Exception{ 13 14 System.out.println("======三角形种类====="); 15 System.out.println("[1] 进行三角形类型判断"); 16 System.out.println("[e] 退出。"); 17 while (in.hasNext()) { 18 String i = in.nextLine(); 19 switch(i){ 20 case "1":{ 21 int i_a,i_b,i_c; 22 System.out.println("请输入三角形的三条边:"); 23 do { 24 Scanner scana=new Scanner(System.in); 25 String a=scana.next(); 26 Scanner scanb=new Scanner(System.in); 27 String b=scanb.next(); 28 Scanner scanc=new Scanner(System.in); 29 String c=scanc.next(); 30 if(IsInteger.IsNum(a)&&IsInteger.IsNum(b)&&IsInteger.IsNum(c)) 31 { 32 i_a = Integer.parseInt(a); 33 i_b = Integer.parseInt(b); 34 i_c = Integer.parseInt(c); 35 System.out.println(Sort.triangle(i_a, i_b, i_c)); 36 break; 37 } 38 else{ 39 System.out.println("输入不是整数!请重请输入三角形的三条边:"); 40 } 41 } while (true); 42 System.out.println("==========请继续选择==========="); 43 System.out.println("[1] 进行三角形类型判断"); 44 System.out.println("[e] 退出。"); 45 break ; 46 } 47 case "e":{ 48 System.exit(1) ; // 系统退出 49 break ; 50 } 51 default:{ 52 System.out.println("请选择正确的操作!") ; 53 } 54 } 55 } 56 } 57 }
1 package TSort; 2 public class IsInteger { 3 public static boolean IsNum(String str) 4 { 5 if(str==null) 6 { 7 return false; 8 } 9 else{ 10 try{ 11 @SuppressWarnings("unused") 12 int num=Integer.valueOf(str);//把字符串强制转换为数字 13 return true;//是数字,返回true 14 }catch (Exception e) { 15 return false; 16 } 17 } 18 } 19 }
1 package TSort; 2 public class Sort{ 3 static String t1="边的值不在范围内"; 4 static String t2="不构成三角形"; 5 static String t3="等边三角形"; 6 static String t4="等腰三角形"; 7 static String t5="直角三角形"; 8 static String t6="一般三角形"; 9 public static String triangle(int a,int b,int c){ 10 if(a<1 || a>100 ||b<1 || b>100|| c<1|| c>100) 11 { 12 return t1; 13 } 14 else if(a>=b+c ||b>=a+c||c>=a+b) 15 { 16 return t2; 17 } 18 else if(a==b &&b==c &&c==a){ 19 return t3; 20 } 21 else if(a==b ||b==c ||c==a){ 22 return t4; 23 } 24 else if(a*a+b*b==c*c ||b*b+c*c==a*a ||c*c+a*a==b*b){ 25 return t5; 26 } 27 else { 28 return t6; 29 } 30 } 31 }
4、修正后心得体会
(1)做一个功能简单的程序,也要当成一个完整的应用,要考虑到程序在非人为情况下不出现闪退崩溃等情况;
(2)对于参数的声明定义要明确这个类型的范围(比如int最大最小是多少,如果超过又怎么处理);
(3)从Scanner中获取数据,要习惯进行处理,得到期望输入的类型再进行下一步功能实现;
(4)if()条件处理可以进行封装成一个方法,这样子复杂的条件判断能够单独进行,方便检查处理。
(5)对于编程开发人员可能只是为了完成这个功能,但是对于测试人员来说,功能只是程序正确的一个体现,所以如果不想让测试人员检查出更过错误,就要养成严谨的代码习惯,正确的处理数据,代码整洁,功能完善。
第二次作业+105032014037