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中不标注泛型,编译时会出现不安全数据类型的错误,养成好习惯。

posted on 2019-11-25 22:38  寺川愛美  阅读(153)  评论(0编辑  收藏  举报