目录
6-6 jmu-Java-05集合-List中指定元素的删除 (15 分)
Eclipse常用快捷键
/*
* Eclipse常用快捷键
* 1.补全代码声明:alt + /
* 2.快速修复:ctrl + 1
* 3.批量导包:ctrl + shift + o
* 4.单行注释:ctrl + /
* 5.多行注释:ctrl + shift + /
* 6.取消多行注释:ctrl + shift + \
* 7.复制指定行:ctrl + alt + ↓或↑
* 8.删除指定行:ctrl + d
* 9.上下移动代码:alt + ↑或↓
* 10.切换到下一行代码空位:shift + enter
* 11.切花到上一行代码空位:ctrl + shift + enter
* 12.查看源码:ctrl + shift + T 或者 ctrl + 目标
* 13.退回到前一个编辑页面:alt + ←
* 14.前进到下一个编辑页面:alt + →
* 15.查看指定类继承树结构:ctrl + T
* 16.复制代码:ctrl + c
* 17.撤销:ctrl + z
* 18.重做:ctrl + y
* 19.剪切:ctrl + x
* 20.粘贴:ctrl + v
* 21.保存:ctrl + s
* 22.全选:ctrl + a
* 23.格式化代码:ctrl + shift + f
* 24.选中数行,整体后移:tab
* 25.选中数行,整体前移:shift + tab
* 26.在当前类中享实类结构,搜索指定的属性和方法:ctrl + o
* 27.批量修改指定的变量名、方法名和类名:alt + shift + r
* 28.转大写:ctrl + shift + x
* 29.转小写:ctrl + shift + y
* 30.自动生成getter/setter/构造器:alt + shift + s
* 31.显示当前选择资源的属性:alt + enter
* 32.快速查找(参照选中字符快速定位下一个):ctrl + k
* 33.关闭当前窗口:ctrl + w
* 34.关闭所有窗口:ctrl + shift + w
* 35.查看指定的结构被使用过的地方:ctrl + alt + g
* 36.查找与替换:ctrl + f
* 37.最大化当前的视图:ctrl + m
* 38.直接定位到当前行的首位:home
* 39.直接定位到当前行的末位:end
*/
填空题
4-1 自定义一个注解AnnotationTest,设置参数的默认值为空字符串。
@Target({TYPE, METHOD})
@Retention(RetentionPolicy.RUNTIME )
public AnnotationTest{
String value() default "";
}
4-2利用反射,为对象的name属性赋值.
class People{
private String name;
private int age;
public String toString(){
return "name is" + name +",age is" + age;
}
}
import java.lang.reflect.*;
public class Main {
public static void main(String[] args) {
People p = new People();
Class cla = p.getClass(); //
Field nameField = cla.getDeclaredField("name"); //
nameField.setAccessible(true);
nameField.set(stu,"Tom") ;//设置对象的姓名属性为Tom
}
}
5-3 下列程序使用泛型机制创建一个数组列表对象,并向其添加三个元素,利用迭代器遍历该数组列表,请把程序补充完整。
import java.util.*;
public class Main{
public static void main(String[] args) {
List<String> al=new ArrayList<String>();
al.add("red");
al.add("yellow");
al.add("blue");
ListIterator<String> listIter = al.listIterator();
while(listIter.hasNext())
System.out.print(listIter.next()+" ");
}
}
输出
red yellow blue
6-6 jmu-Java-05集合-List中指定元素的删除 (15 分)
编写以下两个函数
/*以空格(单个或多个)为分隔符,将line中的元素抽取出来,放入一个List*/
public static List<String> convertStringToList(String line)
/*在list中移除掉与str内容相同的元素*/
public static void remove(List<String> list, String str)
裁判测试程序:
public class Main {
/*covnertStringToList函数代码*/
/*remove函数代码*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNextLine()){
List<String> list = convertStringToList(sc.nextLine());
System.out.println(list);
String word = sc.nextLine();
remove(list,word);
System.out.println(list);
}
sc.close();
}
}
样例说明:底下展示了4组测试数据。
###输入样例
1 2 1 2 1 1 1 2
1
11 1 11 1 11
11
2 2 2
1
1 2 3 4 1 3 1
1
###输出样例
[1, 2, 1, 2, 1, 1, 1, 2]
[2, 2, 2]
[11, 1, 11, 1, 11]
[1, 1]
[2, 2, 2]
[2, 2, 2]
[1, 2, 3, 4, 1, 3, 1]
[2, 3, 4, 3]
答案:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class Main {
/*以空格(单个或多个)为分隔符,将line中的元素抽取出来,放入一个List*/
public static List<String> convertStringToList(String line) {
//加空格
String[] ss = line.split("\\s+"); String的split方法支持正则表达式
//Arrays:asList(T... a) 返回由指定数组支持的固定大小的列表。
//ArrayList(int initialCapacity) 构造具有指定初始容量的空列表。
List<String> st = new ArrayList<String>(Arrays.asList(ss)); 将数组转化为list
return st;
}
/*在list中移除掉与str内容相同的元素*/
public static void remove(List<String> list, String str) {
//List:boolean contains(Object o) 如果此列表包含指定的元素,则返回 true
if(!list.contains(str)) return;
else {
//List:int size() 返回此列表中的元素数。
for(int i=0;i<list.size();i++) {
//怎么把String数组放到List中,可以先把String数组转换为List
//String:boolean contains(CharSequence s) 当且仅当此字符串包含指定的char值序列时才返回true。
if(str.contains(list.get(i))) {
list.remove(list.get(i));
i--; 这是难度,删除的话必须加这句,否则你可能会出现跳着删除的情况
}
}
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNextLine()){
List<String> list = convertStringToList(sc.nextLine());
System.out.println(list);
String word = sc.nextLine();
remove(list,word);
System.out.println(list);
}
sc.close();
}
}
好好看注释。
在eclipse中, 快速输入System.out.println();的快捷键:
首先输入syso,然后再按Alt+/ ,就可以快速输入。
7-2 List的使用 (15 分)
本题练习列表的使用。
- 定义Person类
- 定义私有属性String name,int age,使用Eclipse生成每个属性setter 、getter,有参Person(String name,int age) 、无参 构造方法,toString方法。
- 定义Main类,在main方法中
- 定义List list = new ArrayList();
- 用键盘给变量n赋值
- 生成n个Person对象并添加到列表中,该Person的name和age通过键盘给出
- 循环列表,输出列表所有Person对象信息(调用toString方法)
- 输入一个字符串表示姓名,判断该字符串表示的Person对象在List中是否存在,如果存在,输出该Person,否则输出此人不存在。
输入格式:
先一行输入n表示对象个数,然后每行输入一个Person对象的name和age 一行输入一个人的姓名对其进行查询
输出格式:
对每一对象,在一行中输出对象的信息。 对查询的人员,查到输出该人的信息,否则输出此人不存在。
输入样例:
在这里给出一组输入。例如:
3
zhang 23
li 44
wang 33
li
3
zhang 23
li 44
wang 33
may
输出样例:
在这里给出相应的输出。例如:
Person [name=zhang, age=23]
Person [name=li, age=44]
Person [name=wang, age=33]
Person [name=li, age=44]
Person [name=zhang, age=23]
Person [name=li, age=44]
Person [name=wang, age=33]
此人不存在
答案:
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
List<Person> list = new ArrayList<Person>();
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for(int i=0;i<n;i++) {
Person p=new Person(sc.next(),sc.nextInt());
list.add(p);
System.out.println(p.toString());
}
String na = sc.next();
int flag = 0;
for(int i=0;i<n;i++) {
//
if(list.get(i).getName().equals(na)) {
System.out.println(list.get(i).toString());
flag = 1;
}
}
if(flag == 0)
System.out.println("此人不存在");
}
}
class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int s1) {
this.age = s1;
}
public Person() {
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person [name=" +name+", age="+age+"]";
}
}