-
务必重视书写
-
读题
-
要勤于动笔
-
code tracing table
-
索引
-
错误与异常汇总
-
编译错误
-
运行时异常
-
数组相关
-
ArrayList 相关
-
String、Array 和 Array List 的区别
-
编写类的题目
-
数组
-
二维数组
-
ArrayList 删除元素
-
写代码
-
继承
-
对象的调用
-
字符串
-
unit 1 primitive type and data
-
unit 2 using object
-
unit 3 boolean expression
-
iteration
务必重视书写
书写!书写!还是书写!
读题
一个真诚而朴实的建议就是,计算机的题干至少读两遍,很可能某个方法的关键在你看不到的某句话中的定语从句。 一定要看清楚,题目给了哪些类;有哪些实力方法和实例属性 instance variable 和 instance method。
要勤于动笔
-
遇到数组、字符串和 ArrayList 的题目,一定要在元素的上方标出索引
-
-
-
如果里面有 i-1,或者 i+1 就要小心数组索引越界的问题
code tracing table
要熟悉基本的 while、for、if、elseif 的用法,然后用 code tracing table 认真分析做题。 任何程序都可以分解为顺序、条件和循环三种基本结构,只要有耐心,结合 code tracing table,基本上都能做对,遇到题目千万不要慌,code tracing 来帮忙,不要被“看上去很长“代码吓到,耐心分析。
索引
-
对于字符串的 substring 方法,第 2 个参数是字符串的长度不会报错
-
"abc".substring(2, 3) 或者"abc".substring(3) 不会报错
-
-
-
对于 ArrayList 来说,add 方法的第一个参数可以是字符串的长度,相当于在列表的末尾插入元素
-
set 和 remove 方法的参数应该是
[0, list.size)
-
-
for (int i = 0; i < arr.length; i++)
-
for(int i = 0; i < arr.length-1; i++ 都是对的
-
-
错误与异常汇总
编译错误
java 代码翻译成可以执行的代码过程中发生的错误,程序无法翻译成可执行的代码
-
overload 错误导致的
compile-error
-
重载指的是方法的参数数量相同或者数量相同但是类型不一致
-
一般会考察下面哪个方法会导致编译错误(构造方法或者普通方法)
-
int a = 3.2; 整数无法转换成小数,会导致错误
-
运行时异常
运行时异常说的是 run-time error ,代码语法没错,但是运行报错
字符串相关
String s;
s.length(); // NullPointerException
字符串等对象,如果只是声明变量,没有初始化默认值是 null,在 null 上调用会导致异常,判断一个对象是不是 null 应该用 object == null 或者 objec != null 。
String s = "hello";
s.substring(2, 100); // ArrayIndexOutOfBound
字符串索引越界
数组相关
String[] names = new String[];
names[0].length; // NullPointerException
数组中的对象,如果没有初始化,默认是 null 。
names[10]
数组索引越界。
ArrayList 相关
ArrayList<String> list = new ArrayList<String>();
list.add("hello");
list.add(list.size(), "a"); // 不会报错
list.add(list.size() + 1, "a"); // 会报错
list.get(list.size()) |
ArrayListIndexOutOfBound |
list.get(list.size()-1) |
不报错 |
list.set(list.size(), "s") |
ArrayListIndexOutOfBound |
list.set(list.size()-1, "s") |
不报错 |
list.remove(list.size()-1, "s") |
不报错 |
list.remove(list.size(), "s") |
ArrayListIndexOutOfBound |
for (String s : list)
{
list.add("s"); // ConcurencyExcepiton
}
不要在 for 中修改元素,否则会导致异常。
String、Array 和 Array List 的区别
访问长度
String |
str.length() |
ArrayList |
list.size() |
Array |
arr.length // 注意是属性没有括号 |
访问元素
String |
str.substring(i, i+1) str.charAt(i) |
Array |
arr[index] |
ArrayList |
list.get(i) |
2dArray |
arr[rowIndex][colIndex] |
注意数组中元素只能修改不能删除;列表中的元素可以删除。
列表删除元素
列表删除元素建议倒着写,防止跳过元素
列表中插入元素
注意 for 循环的用法,一般是按照顺序插入,如果没有找到需要插入的元素,在最后插入。
编写类的题目
哪些是属性
-
看看构造方法创建对象哪些实际参数,这些实际参数往往就是类的属性或者说实例变量
-
如果方法进行计算需要的值,没有作为参数提供,构造方法也没,说明大概需要你自己声明属性,这些熟悉了可能是在构造方法,或者其他方法中修改的。
-
数组

查找元素
如果选择题中遇到了 binaray search,注意,一定是排好序的数据。
public static count(int[] arr, int val)
{
int count = 0;
for (int i = 0; i < arr.length; i++)
{
if (arr[i] == val)
{
count += 1;
}
}
return count;
}
二维数组
假设变量 mat 是二维数组:
String[][] mat = {{"a", "b"}, {"c", "d"}};
int rows = mat.length; 2
int[] firstRow = mat[0] // {"a", "b"}
int cols = mat[0].length // 列数,2
ArrayList 删除元素
public static void del(ArrayList<String> list, String val)
{
for (int i = 0; i < list.size(); i++)
{
String item = list.get(i);
if (item.equals(val))
{
list.remove(i); // or list.remove(item)
i -= 1; // avoiding skipping item
}
}
}
写代码
-
注意 for 和 while 后面不要写 colon
-
调用类内部的 instance method 不要加类的名字,可以用 this
-
大题中的继承
-
如果大题中遇到了继承,注意看,一些属性是在父类还是子类中
-
如果属性在父类中,一般用 super 调用父类的构造方法
-
如果父类有这些属性的 setter 方法也可以调用
继承
-
-
-
-
类默认调用父类没有参数的构造方法 super() 相当于
-
子类如果没有明确的调用父类的构造方法,相当于明确的调用了
super() 。
注意 return if 和 else if 的混合考法,if 语句顺序执行的;注意 else if 的逻辑错误。
对象的调用
-
-
如果不是静态方法,编写代码的时候,调用方法可以什么也不用写
字符串
-
-
-
字符串用 compareTo 比较大小,字典中顺序靠后的大
-
"a".compareTo("b") 结果 -1,b 在后面,结果必然是负数,然后 b 在 a 大后一位
-
-
"abc".compareTo("abcde") ,结果是 -2,如果比较下来没有不同的字符,那么就取长度的差值
unit 1 primitive type and data
image.png
运算优先级
-
-
-
-
-
-
-
注意 FRQ 中求比例和平均值的题目,要注意结果的强制类型转换
-
-

 这个途中,注意复杂表达式的写法。
unit 2 using object
' fill='%23FFFFFF'%3E%3Crect x='249' y='126' width='1' height='1'%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)

unit 3 boolean expression

 注意 elseif 语句满足一个条件,其余的不看了,所以要注意这里容易考察的逻辑错误。
iteration
 注意用 tracing table 解决问题。
 注意一般情况下,条件执行的次数比循环执行的次数多 1。
更多AP计算机课程辅导
扫码添加小助手
犀牛国际坚持小班化、个性化的教育模式,能让授课老师在最大程度关注到每一位学生的学习动态与知识掌握程度,用精英老师来培养精英学生,让学生学习优秀的方法,为学生埋下优秀的基因。
犀牛国际AP培训课程开设了精品小班、一对一等多种班型,家长和同学们可任意选择,线下+线上同步授课,在上海、北京、南京、苏州、无锡、杭州、广州、深圳、青岛、合肥、武汉、济南、成都等地均设有线下校区,注:各校区班型不同,具体扫描底部二维码咨询! |