tangVoice - 唐城好声音
实现选手的增删改查,非常基础的数组操作,不过我了解了arraylist决定用arraylist做
对于一个选手来说肯定是需要用到对象,且将属性封装到对象中合理
import java.util.Scanner; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; public class Tangvoice{ public static void main( String[] args ){ System.out.println("----------欢迎来到唐城好声音----------"); System.out.println("1.显示所有学员信息"); System.out.println("2.根据年龄从小到大排序"); System.out.println("3.随即观看学员技能"); System.out.println("4.删除学员"); System.out.println("5.添加学员"); System.out.println("0.退出"); System.out.println("-----------------------------------"); Scanner input = new Scanner(System.in); ArrayList<Singer> list = new ArrayList<Singer>(); Singer Ji=new Singer("Jikejunyi",23,"wangfeng","pop","pop song singer"); Singer Zhang=new Singer("Zhangbichen",22,"naying","classic","classic song singer"); Singer Liu=new Singer("Liuanqi",28,"jielun","rock","rock song singer"); Singer Liang=new Singer("Liangbo",21,"naying","classic","classic song singer"); Singer Mao=new Singer("Maobiyi",26,"halin","classic","classic song singer"); list.add(Ji); list.add(Zhang); list.add(Liu); list.add(Liang); list.add(Mao); boolean finish = true; while(finish){ System.out.println(); System.out.print("Choose operation: "); switch(input.nextInt()){ case 1:list.forEach(item->item.display()); break; case 2:ArrayList<Singer> temp = new ArrayList<Singer>(); temp.addAll(list); Collections.sort(temp,(a,b)->{ if(a.getAge()>b.getAge()) return 1; else return -1; }); temp.stream().filter(item->item!=null).forEach(item->item.display()); break; case 3: double n = Math.random()*list.size(); list.get((int)n).display(); break; case 4: list.forEach(item->item.display()); System.out.println("delete which singer: "); int index = input.nextInt(); list.remove(index); System.out.println("delete index=" +index+" singer"); break; case 5: System.out.println("enter Singer info:"); System.out.print("Type: "); String type1 = input.next(); System.out.print("Name: "); String name1 = input.next(); System.out.print("Age: "); int age1 = input.nextInt(); System.out.print("Team: "); String team1 = input.next(); Singer newSinger = new Singer(name1,age1,team1,type1,null); list.add(newSinger); System.out.println("add successfully"); break; case 0:finish=false; System.out.println("System quit"); } } } } class Singer{ private String name; private int age; private String team; private String type; private String skill; Singer(String _name, int _age, String _team, String _type, String _skill){ this.name = _name; this.age = _age; this.team = _team; this.type = _type; this.skill = _skill; } public int getAge(){ return this.age; } public String getName(){ return this.name; } public void display(){ System.out.println("Singer type: "+type+", "+"name: "+name+", "+"age: "+age+", "+"team: "+team); } }
总结一下问题:
第一个是UI的问题,每次都要从console看,java的清屏不像c++那么容易(可能是我还没有很了解),最好写swing出来个UI
第二个是ArrayList的复制问题,排序要求不能对原数组操作,换ArrayList的话只能重新建个新ArrayList,再用addAll()方法把旧list加进去,这样是最快的方法么?
第三个是lambda表达式的问题,()->{}这类箭头函数中是不能有赋值操作的,很多功能是不支持的,会提示必须是static或final
第四个是注意泛型的问题,如果在ArrayList中不标注泛型,编译时会出现不安全数据类型的错误,养成好习惯。