Java第02次实验(Java基本语法与类库)
PTA
2.1 综合小测验
关键代码:
ArrayList<Integer> list = new ArrayList<>();
Integer num[] = null;
Scanner sc = new Scanner(System.in);
String order;
while (sc.hasNext()) {
order = sc.next();
switch (order) {
case "fib":
int a = sc.nextInt();
for (int i = 0; i < a; i++) {
if (i == 0 || i == 1) {
list.add(1);
continue;
}
list.add(list.get(i - 1) + list.get(i - 2));
}
for (int i = 0; i < a; i++) {
if(i==a-1) {
System.out.print(list.get(i));
break;
}
System.out.print(list.get(i) + " ");
}
list.clear();
System.out.println();
break;
case "sort":
while (sc.hasNextInt()) {
list.add(sc.nextInt());
}
num = list.toArray(new Integer[0]);
Arrays.sort(num);
System.out.println(Arrays.toString(num));
list.clear();
break;
case "search":
int search=Arrays.binarySearch(num, sc.nextInt());
if(search<0)
System.out.println(-1);
else
System.out.println(search);
break;
case "getBirthDate":
int n=sc.nextInt();
for(int i=0;i<n;i++) {
String str=sc.next();
System.out.println(str.substring(6, 10)+"-"+str.substring(10, 12)+"-"+str.substring(12, 14));
}
break;
default:
System.out.print("exit");
System.exit(0);
break;
}
}
面临的问题:
怎样去存储这些数据?
收获:
学习使用ArrayList动态数组,并且知道他的add、substring、tostring等方法。
2.2 身份证排序
关键代码:
Scanner sc = new Scanner(System.in);
Integer num = sc.nextInt();
ArrayList<String> id = new ArrayList<>();
String temp;
for (int i = 0; i < num; i++) {
int flag=0;
temp=sc.next();
Integer age1,age2;
age1=Integer.valueOf(temp.substring(6,10));
for(int m=0;m<i;m++) {
age2=Integer.valueOf(id.get(m).substring(6,10));
if(age1<age2) {
id.add(m,temp);
break;
}
else if (age1.equals(age2)){
age1=Integer.valueOf(temp.substring(10,12));
age2=Integer.valueOf(id.get(m).substring(10,12));
if(age1<age2) {
id.add(m,temp);
break;
}
else if(age1.equals(age2)){
age1=Integer.valueOf(temp.substring(12,14));
age2=Integer.valueOf(id.get(m).substring(12,14));
if(age1<age2) {
id.add(m,temp);
break;
}
}
}
flag=1;
}
if(flag==1) {
id.add(temp);
}
if(id.isEmpty())
id.add(temp);
}
while(sc.hasNext()) {
String order=sc.next();
switch (order){
case "sort1":
for(int i=0;i<num;i++) {
System.out.println(id.get(i).substring(6,10)+"-"+id.get(i).substring(10,12)+"-"+id.get(i).substring(12,14));
}
break;
case "sort2":
for(int i=0;i<num;i++) {
System.out.println(id.get(i));
}
break;
default:
System.out.println("exit");
System.exit(0);
}
}
面临的问题
怎样为身份证里的日期做排序?
收获
这题可以直接用array.sort进行排序,相比我的方法简便许多
2.3 StringBuilder
关键代码:
Scanner sc=new Scanner(System.in);
while(sc.hasNextInt())
{
int n=sc.nextInt(),begin=sc.nextInt(),end=sc.nextInt();
StringBuilder nums=new StringBuilder("");
for(int i=0;i<n;i++) {
nums.append(i);
}
System.out.println(nums.substring(begin, end));
}
所面临的问题
如何对对象直接操作防止内存堆积?
收获
运用stringbuilder可以直接修改对象里的元素。
2.4 动态数组
关键代码
Scanner sc = new Scanner(System.in);
while(sc.hasNext())
{
Integer num=sc.nextInt();
String[][] str=new String[num][];
for(int i=0;i<num;i++)
{
str[i]=new String[i+1];
for(int j=0;j<=i;j++)
{
str[i][j]=Integer.toString(i+1)+"*"+Integer.toString(j+1)+"="+Integer.toString((i+1)*(j+1));
System.out.print(str[i][j]);
if(i==j)
break;
if((i+1)*(j+1)<10)
{
System.out.print(" ");
}
else
{
System.out.print(" ");
}
}
System.out.println();
}
System.out.println(Arrays.deepToString(str));
}
所面临的问题
怎么创建一个每个二维长度都不一样的二维数组。
收获
在创建这种数组时先要定义好一维的长度,再逐个去定义二维的长度,才能创建一个每个二维长度都不一样的二维数组。