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的生疏感等,让我觉得我学习这门课是非常有意义的一件事。总而言之,今后继续努力吧!








网友评论