Java基本语法与类库
实验目标
1.掌握Git的基本概念与基本操作。
2.进一步熟悉Scanner的使用。
3.熟练掌握Eclipse常用快捷键
4.掌握常用类(String、Integer、StringBuilder等)及JDK文档的基本使用
5.掌握数组与ArrayList
2.PTA
2.1综合小测验
对于控制台输入的处理,nextLine()方法与其他nextXXX方法混用会产生吞回车问题。建议全部使用Scanner.nextLine()处理输入以免碰到行尾回车换行问题。
注意:
- Eclipse自动生成快捷键解Alt+,如switch、for、while、sysout、main。
- 使用Eclipse快速创建程序框架(利用Eclipse的quick fix功能快速创建方法)。
- 不要重复创建Scanner对象。
- 缩进, Tab、Shift+Tab。运行, ctrl+F11。
- 如果JDK为1.6版本(最新版PTA已支持1.8),switch不支持字符串。需先将字将String转化为int(早期的PTA 中使用的open jdk6)
- 使用Eclipse的quick fix功能快速创建函数int choice2Int(String choice)
关键代码:
1.Integer.parseInt()将String字符类型数据转换为Integer整型数据
2.Arrays.sort()将传入的数组按从小到大进行排序
3.Arrays.toString():使用System.out.println(数组命名称)得到的结果是地址。
如果想直接把数组中的内容打印出来,直接调用Arrays类中的toString()方法就可以完成
4.bir.substring(begin,end):begin为开始截取的位置 end-begin=截取子串的位数
2.2身份证排序
注意:
- sort1可直接使用Arrays.sort,String的subString。
- 采用结构化编程方式,针对sort1、sort2各写一个方法处理。
- 其他:nextInt()与nextLine()混用可能产生的后果。建议:全部使用Scanner的nextLine()处理输入以免碰到行尾回车换行问题。
关键代码:
contains () 方法用于判断字符串中是否包含指定的字符或字符串
2.3StringBuilder
使用+进行字符串拼接的弊端:
字符串拼接过程中会创建新的对象,所以如果要在一个循环体中进行字符串拼接,就要考虑内存问题和效率问题。而在循环中使用+进行字符串拼接,每次都是new了一个StringBuilder,然后再把String转成StringBuilder,再进行append。这样频繁的新建对象不仅仅会耗费时间,还会造成内存资源的浪费。
因此,直接使用StringBuilder的方式是效率最高的。StringBuilder天生就是设计来定义可变字符串和字符串的变化操作的。
关键代码:
1.StringBuilder str=new StringBuilder(""):当对字符串多次进行修改的时候,需要使用StringBuilder类
2.str.append(i):追加的字符串生成器
2.4动态数组
注意:
动态生成不规则大小的数组。定义数组时数组第一维需事先确定大小,第二维大小可在程序运行中动态确定。
关键代码:
1.String[][] arr=new String[n][]:二维数组;有n行的字符串数组
2.arr[i]=new String[i+1]:设置一行的字符串个数;符合乘法表格式,每行字符串个数递增
3.System.out.printf("%-7s",arr[i][j]):用“%-7s”控制字符串占七个字符位,负号表示左对齐
比较printf,print,println:
print输出后不换行;println输出后换行;printf格式化输出
4.Arrays.deepToString():将数组中的元素放在[]中,相邻元素间以逗号隔开
2.5ArrayList入门
注意:
ArrayList的常用方法add(e)、add(index, e)等
使用ArrayList可以代替数组,见如下代码,ArrayList用法请参考JDK文档。
import java.util.ArrayList;
import java.util.List;
public class ArrayListDemo {
public static void main(String[] args) {
//泛型,Integer
List<Integer> integerList = new ArrayList<>();
integerList.add(1);
integerList.add(new Integer(1));//和上句效果一样
for (Integer e : integerList) {
System.out.println(e);
}
//泛型,String
List<String> strList = new ArrayList<String>();
strList.add(1+"");
strList.add("abc");
strList.set(0, "def");//随机存取,设置0号位置的元素
for (int i = 0; i < strList.size(); i++) {
System.out.println(strList.get(i));
}
}
}
定义了一个对象list,创建一个String集合,这个集合里只能放String类型的
List和ArrayList:
List是集合最大的父类,它包含了ArrayList。
如果直接声明为ArrayList list=new ArrayList()这个也没有问题。而声明成:List list=new ArrayList()使得list这个对象可以有多种的存在形式
List是一个接口,而ListArray是一个类。
ListArray继承并实现了List。所以List不能被构造,但可以为List创建一个引用,而ListArray就可以被构造。
List list; //正确 list=null;
List list=new List(); // 是错误的用法
List list = new ArrayList();这句创建了一个ArrayList的对象后把上溯到了List。此时它是一个List对象了,有些ArrayList有但是List没有的属性和方法,它就不能再用了。
import java.util.Iterator;//迭代器
-
迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象
-
使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。
-
使用next()获得序列中的下一个元素。
-
使用hasNext()检查序列中是否还有元素。
-
使用remove()将迭代器新返回的元素删除。
2.6浮点数的精确运算
-
BigDecimal对象的构造(以字符串的方式构造)
最好使用String来创建BigDecimal对象,更精确
-
熟悉以面向对象的方式进行各种操作(加减乘除)。
加减乘除运算需要调用方法:
加add,减subtract,乘multiply,除divide -
BigDecimal的不可变性,如何体现?
BigDecimal是一个不可变类,每个操做(加减乘除等)都会返回一个新的对象
eg:
BigDecimal a=new BigDecimal("1.3");
BigDecimal b=new BigDecimal("2.5");
a.add(b);
System.out.println(a);
我们很容易会认为输出的是3.8,而实际上输出的是1.3
由于BigDecimal是不可变的,在进行每一步运算时,都会产生一个新的对象,因此a.add(b)虽然作了加法操做,可是a并无保存加操做后的值,正确的用法应该是a=a.add(b)