美文网首页
cs61b2018sp WEEK1 课后练习

cs61b2018sp WEEK1 课后练习

作者: 且乐一杯酒 | 来源:发表于2022-03-14 19:06 被阅读0次

2022.3.14

这是WEEK1.1的课后练习部分,包含着一些笔记,权当后记吧

WEEK1.1 你好世界 课后练习

LAB

1.生词

repository——存储库;栈

HW 0

1.生词

syntax——句法
material explicitly——明确材料
verbose——冗长的
Conditionals——条件语句
Curly Braces——大括号
indentation——缩进
Curly Brace——花括号
fret——烦恼(v.)
approximations——近似值
verify——核实,校验
correctness——正确性

2.CE1a Drawing a Triangle

即画一个这样的三角形



还是挺简单的,稍微写一下二重循环就行,比较简单我就不写注释了,应该能看懂(写得不是很好,大佬们见谅)

public class CE1a{
    public static void main(String[] arg){
        int i,n;
        for(i = 1;i <= 5;i++){
            for(n = 0;n<i;n++){
                drawAStar();
                if(n == i-1){
                    System.out.print('\n');
                }
            }
        }
    }

    public static void drawAStar(){
        System.out.print('*');
    }
}

教材有一个知识点,关于 System.out.print和 System.out.println的不同点,大致是说前者不会自动换行,后者会自动换行,所以我代码上就有相应换行的操作。

3.练习2 找最大值

在一个数组中找最大值,同样比较简单,就不写注释了。
但这代码多少不够泛用,我默认了数组里有数的,如果是空数组就没辙了,应该一开始来个判断,再继续会好很多。

public class E2{
    public static void main(String[] args){
        int[] numbers = new int[]{9, 2, 15, 2, 22, 10, 6};
        System.out.print(max(numbers));      
    }
    public static int max(int[] m) {
        int M = m[0];
        for(int i = 1;i < m.length;i++){
            if(M < m[i]){
                M = m[i];
            }
        }
        return M;
    }
}

这里我出了一些问题,但无关大雅(指自己眼瞎了),就是max的返回值一开始是return 0,我复制下来时没注意,搞得我一直不懂咋回事,而vscode的单步调试又不知道咋搞,结果弄了好久。最后看到了返回值没改,是我大E了。

突然发现练习3就是让我们用for循环写这个代码,看来它本意是用while循环,那我已经用for循环写了,那我就不写了。

3.练习4

描述如图,我也不知道叫啥名字好,大概就这样



还有3个提示:



同样,我们默认数组里是有数的,来写写程序吧
public class E4 {
    public static void windowPosSum(int[] a, int n) {
    /** your code here */ 
    int temp = 0;
    int i;
    for(i = 0;i<a.length;i++){
        if(a[i]<0){
            continue;
        }else{
            for(int j = 0;j<=n && (i+j)<a.length;j++){
                temp += a[i+j];
            }
            a[i] = temp;
            temp = 0;//还原
        }
    }
    }
  
    public static void main(String[] args) {
      int[] a = {1, 2, -3, 4, 5, 4};
      int n = 3;
      windowPosSum(a, n);
      // Should print 4, 8, -3, 13, 9, 4
      System.out.println(java.util.Arrays.toString(a));
    }
  }

还是比较简单的,不过要注意一点就是在第二重循环时注意一下循环条件,不然i+j大于数组长度后就错误了(我一开始没注意到这点,其实Hint 3有说用break来解决,我这里就用&&来解决了),其他都还好,问题不大。

4.增强for循环

格式:

 for (String s : a) {}

这里a是一个字符串数组,s是a中的每一个元素。

4.后记

这是第一周的课后部分,当然我是一天弄完的,虽然java面向对象上课学过了,但还是有些收获的,比如好久不敲java的生疏感等,让我觉得我学习这门课是非常有意义的一件事。总而言之,今后继续努力吧!

相关文章

网友评论

      本文标题:cs61b2018sp WEEK1 课后练习

      本文链接:https://www.haomeiwen.com/subject/warsdrtx.html