山东大学项目实训树莓派提升计划二期(六)条件判断与循环

目录

实验一 条件判断与循环

实验目的

实验内容

实验示例代码

1.Stars.java

2.PalindromeTester.java

实验设计的思路和考量

1.Stars

2.PalindromeTester


实验一 条件判断与循环

实验目的

掌握结构化程序设计的分支结构。

学习用if /else语句实现单分支。

学习用if /else语句和swich语句实现多分支。

掌握结构化程序设计的循环结构。

学习使用while语句、do-while语句、for语句实现循环。

学习控制循环终止条件、循环的正常退出、使用continue语句、break语句。

实验内容

1.编写Stars.java程序中的test01_1Code()方法,实现从控制台输入一个自然数n(n>=1),使得在控制台中打印出边长为n的菱形。

例如,n=3时,输出:

*

***

*****

***

*

2.编写PalindromeTester.java程序中的 test01_2Code(String testString)方法,测试参数testString是否为回文字符串(回文:顺读和倒读都相同的字符串序列),如果是,则返回true;反之返回false。

例如,测试用例为“radar”时,返回true。

实验示例代码

1.Stars.java

import java.util.Scanner;

public class Stars {
    public void test01_1Code() {
        Scanner s = new Scanner(System.in);
        int n = s.nextInt();
        int k = 1;
        for (int i = 0; i >= 0; i += k) {
            if (i == n) {
                k = -1;
                --i;
                continue;
            }
            for (int j = 0; j < n - i - 1; ++j) System.out.print(" ");
            for (int j = 0; j < 2 * i + 1; ++j) System.out.print("*");
            System.out.println();
        }
    }
}

2.PalindromeTester.java

public class PalindromeTester {
    public boolean test01_2Code(String testString){
        int left,right;
        if(testString.length()==0){
            return false;
        }
        left=0;
        right=testString.length()-1;
        while (testString.charAt(left)==testString.charAt(right)&&left<right){
            left++;
            right--;
        }
        if(left<right){
            return false;
        }else {
            return true;
        }
    }
}

实验设计的思路和考量

1.Stars

本个实验设计为交互式的实验,从控制台进行输入,最后从控制台输出。

交互式程序——Scanner类

实验考察的第一方面为交互式程序。如果程序能在执行期间交互的从用户输入中读取数据,就可使程序每执行一次时计算出新结果,并且新结果取决于输入数据,这样的程序才有实用性。

本个实验中,使用了Scanner类进行交互式程序的考察,学生需要掌握Scanner类的基本使用方法。Scanner类属于Java API,可以方便地读取不同类型的输入数据。使用时,需要使用new运算符,创建一个从键盘读取输入的Scanner类对象:Scanner s = new Scanner(System.in);。

System.in对象代表标准输入流设备,默认为键盘。同时,使用Java API是,要记得使用import关键字进行依赖包的导入,比如import java.util.Scanner;,这样才可以使用Scanner类。

for循环语句

实验考察的第二个方面为条件的判断与循环。在课本的例子中,嵌套for循环在每一层输出与层数相同的“*”的个数,考察内容简单。但是在本实验中,不仅需要考虑每行需要的“*”个数(如果行号为i从0开始,“*”的个数为2i+1),还需要考虑依据行数而变化的、在“*”之前输出的空格的个数(一共输出n-j-1个空格),并且还要考虑,如何使边长达到要求数字n后,递减地输出“*”,使上下对称,输出菱形(在设置第一层for循环时,设置i+=k,k可改变数值,进而控制递增或递减)。实验不仅仅是简单考察for循环的编程方式,更考察了动态情况下for循环条件的改变。

2.PalindromeTester

本个实验由学生修改PalindromeTester类中的方法,对参数testString进行是否是回文串的判断,并返回Boolean类型的值。测试用例封装于TestApplication.java中,验证实验时只需运行该类,无需修改他的代码。

while循环的考察

While循环和for一样,同是需要掌握的重要循环语句。While的判断条件与for循环的写法不同,且需要注意会不会导致无线循环的发生。

对字符串的操作

在实验中,对字符串的考察有三处。首先需要知道length()方法可以得到一个字符串的总长度,总长度可以作为循环条件的限制条件,也可以用于判断字符串是否结束。其次,熟悉string.charAt(e)的方法。这个方法可以根据下标获得字符串中某个位置的值,并返回一个char类型的数据。最后,考察的是字符串的比较,这是我在刚接触这门语言时的一个难点。

对数值的比较:

数值分为整数和浮点数。用int和long为整数,可以通过任意符号进行比较。用float和double为浮点数,不能用“==”运算符,其他均可。因为根据==号的定义,只有当两个浮点数的二进制数位都相等时,这两个浮点数的值才相等,如果被比较的数值是计算的结果,即使他们足够近似,也不大可能达到精确的相等。因此两个浮点数比较时少用==。

对字符的比较:

Char类型为Java中的字符,他以Unicode字符集为基础,定义了所有可能用到的字符的排列顺序。因此可以使用相等性运算和关系运算符来比较字符。如在编写代码时,我运用了testString.charAt(left)==testString.charAt(right)进行比较。

对对象的比较:

对于对象的比较,通常使用的时equals方法,比如String字符串,其实他也是个字符串对象。不能用“==”来比较。当判断两个字符串的相对顺序关系时,会使用到String类的compareTo方法。和equals方法相,compareTo方法更通用。

测试用例的编写

因为需要考察代码的健壮性,因此本个实验设计成了设计者编写测试用例,学生实现编码并进行测试的交互方式。本个实验采用黑盒测试中的等价类划分法,编写测试用例。

有效等价类:字符串长度为奇数、字符串长度为偶数、字符串内容包含字符、数字、空格。

无效等价类:字符串长度为0。

测试用例编写在TestApplication中的对应方法中,运行进行测试,测试失败与成功有不同输出。

测试用例:

    public static void palindromeTester(){
        PalindromeTester p=new PalindromeTester();
        List<String> list=new ArrayList<String>();
        List<Boolean> result=new ArrayList<Boolean>();
        list.add("radar");result.add(true);
        list.add("abracadabra");result.add(false);
        list.add("raddar");result.add(true);
        list.add("");result.add(false);
        list.add("able was I ere I saw elba");result.add(true);
        list.add("Rise to vote ,sir.");result.add(false);
        list.add("123abcdedcba321");result.add(true);
        list.add("123abcdedcba32");result.add(false);
        for(int i=0;i<list.size();i++){
            if(p.test01_2Code(list.get(i))!=result.get(i)){
                System.out.println("测试用例:“"+list.get(i)+"”结果错误!");
                return;
            }else {
                System.out.println("测试用例:“"+list.get(i)+"”结果正确,通过!");
            }
        }
        System.out.println("测试用例全部通过!");
    }

测试未通过输出:

测试通过输出:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值