練手測試題來了,準備好你的idea,淦,忘記更新第三次作業了,抓緊時間補上,題中還有改進的的例如第四題學生資訊可以加上異常型別處理。其他題也還有更好的解法還望批評指正。

2020-10-21 22:00:31

練手測試題來了,準備好你的idea,淦,忘記更新第三次作業了,抓緊時間補上

1 * 程式設計統計字串"ABCD123!@#$%ab"中大寫字母、小寫字母、數位、其它字元的個數並打 印出來。

public class Test_01 {
    public static void main(String[] args) {
        /**
         *  程式設計統計字串"ABCD123!@#$%ab"中大寫字母、小寫字母、數位、其它字元的個數並打 印出來。
         *   isLetter是否是字母 isUpperCase  這種方法也可以,有點C語言功底就用了下述方法。
         *
         */
        String str="ABCD123!@#$%ab";
        int num=0;
        int num1=0;
        int num2=0;
        int num3=0;
        char[] chars = str.toCharArray();
        for (int i = 0; i < chars.length; i++) {

            if ('0'<=chars[i]&&chars[i]<='9'){
                num++;
            }
            else if ('A'<=chars[i]&&chars[i]<='Z'){
                num1++;
            }
            else if ('a'<=chars[i]&&chars[i]<='z'){
                num2++;
            }
            else {
                num3++;
            }

        }
        System.out.println("字串中數位個數為 ;"+num);
        System.out.println("字串中大寫字母個數為 ;"+num1);
        System.out.println("字串中小寫字母個數為 ;"+num2);
        System.out.println("字串中其他字元個數為 ;"+num3);
    }
}
   2  *** 程式設計獲取兩個指定字串中的最大相同子串並列印出來。
     * 如: s1="asdafghjka", s2="aaasdfg" 他們的最大子串為"asd"
     * 提示: 將短的那個串進行長度依次遞減的子串與較長的串比較。**
public class Test_02 {
    public static void main(String[] args) {
     
        String s1="asdafghjka";
        String s2="aaasdfg";
        String substring=null;
        String min=(s1.length()>s2.length())?s2:s1;
        String max=(s1.length()<s2.length())?s2:s1;

        out:for (int i = 0; i < min.length();i++) {

            for (int j = 0,k=min.length()-i; k!=min.length()+1 ; j++,k++) {

                substring = min.substring(j, k);
                if (max.contains(substring)){
                    System.out.println(substring);
                    break out;
                }
            }
        }


    }
}

3 * 準備一個 HashMap 集合,統計字串"123,456,789,123,456"中每個數位字串出現的次數並列印出來。
如:
123 出現了 2 次
456 出現了 2 次
789 出現了 1 次

public class Test_03 {

    public static void main(String[] args) {
        String str="123,456,789,123,456";
        Map<String,Integer> map=new HashMap();
        String[] arr = str.split(",");
        for (String  str1 : arr ){
            if (!map.containsKey(str1)){
                    map.put(str1,1);
            }else {
                map.put(str1,map.get(str1)+1);
            }

        }

        Set<Map.Entry<String, Integer>> entries = map.entrySet();
        for (Map.Entry<String, Integer> key: entries){
            System.out.println(key.getKey()+"   出現的次數 :"+key.getValue());
        }
    }




}

*** 使用 List 集合實現簡易的學生資訊管理系統,要求列印字元介面提示使用者選擇相應的功 能,根據使用者輸入的選擇去實現增加、刪除、修改、查詢以及遍歷所有學生資訊的功能。

  • 其中學生的資訊有:學號、姓名、年齡。 要求: 儘量將功能拆分為多個.java 檔案。**

測試類

public class Test_04 {
    public static void main(String[] args) {
        System.out.println("                  ===========================================");
        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("                  =   ===================================    = ");
        System.out.println("                  ============================================");
        List list =new ArrayList();
        Student Stu =new Student();
        Scanner scanner=new Scanner(System.in);

        out:while (true){
            System.out.print("        請輸入:");
            int i = scanner.nextInt();
            switch (i){
                case 1:
                    list = Student_add.stu_add(list);break;
                case 2:
                    list = Student_re.stu_re(list);break;

                case 3:
                    list = Srudent_up.stu_up(list);break;
                case 4:
                    Student_se.find(list);break;
                case 5:break out;
                default:break out;

            }
        }

    }

}
  • 學號、姓名、年齡。
public class Student {
    private Integer id;
    private String  name;
    private Integer age;

    public Student() {
    }

    public Student(Integer id, String name, Integer age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Student student = (Student) o;

        if (id != null ? !id.equals(student.id) : student.id != null) return false;
        if (name != null ? !name.equals(student.name) : student.name != null) return false;
        return age != null ? age.equals(student.age) : student.age == null;
    }

    @Override
    public int hashCode() {
        int result = id != null ? id.hashCode() : 0;
        result = 31 * result + (name != null ? name.hashCode() : 0);
        result = 31 * result + (age != null ? age.hashCode() : 0);
        return result;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
  • 修改資訊
public class Srudent_up {
    public static List stu_up(List list){
        System.out.println("請輸入要修改學生的id:");
        Scanner sc =new Scanner(System.in);
        int id = sc.nextInt();
        for (int i = 0; i <list.size() ; i++) {
            Student o = (Student) list.get(i);
            if (o.getId().equals(id)){
                System.out.println("請輸入要修改的age :");
                o.setAge(sc.nextInt());
                System.out.println("請輸入要修改的name :");
                o.setName(sc.next());
            }else {
                System.out.println("系統中不存在此學生資訊!!!!");
            }

        }
        return list;
    }
}
 * 資訊新增
public class Student_add {
    public static  List stu_add(List list ){
        Scanner sc=new Scanner(System.in);
        Student stu =new Student();
        System.out.print("請輸入要新增的id :");
        Integer id = sc.nextInt();
        System.out.print("請輸入要新增的name :");
        String name = sc.next();
        System.out.print("請輸入要新增的age :");
        Integer age = sc.nextInt();
        stu.setId(id);
        stu.setName(name);
        stu.setAge(age);
        list.add(stu);
        System.out.println(list);
        return list;
    }

}
  • 刪除資訊
public class Student_re {

    public static List stu_re(List list ){
        System.out.println("請輸入要刪除學生的id:");
        Scanner sc =new Scanner(System.in);
        int id = sc.nextInt();
        for (int i = 0; i <list.size() ; i++) {
            Student o = (Student) list.get(i);
            if (o.getId().equals(id)){
                list.remove(o);
                break;
            }else {
                System.out.println("集合中不存在此元素!!!!");
                break;
            }

        }
        return list;
    }

}
  • 查詢資訊
public class Student_se {
    public static void find(List list){
        System.out.println("                  ==================================================");
        System.out.println("                  =   ===========學生資訊管理系統===============    = ");
        System.out.println("                  =   =       1 :查詢所有學生資訊             =    = ");
        System.out.println("                  =   =       2 :根據id查詢學生資訊           =    = ");
        System.out.println("                  =   =       3 :根據age查詢學生資訊          =    = ");
        System.out.println("                  =   =       4 :根據name查詢學生資訊         =    = ");
        System.out.println("                  =   =       5 :退出                        =    = ");
        System.out.println("                  =   =========================================   = ");
        System.out.println("                  ==================================================");
        Scanner sc=new Scanner(System.in);

       out: while (true){
            System.out.print("             請輸入:");
            int i = sc.nextInt();
            switch (i){
                case 1:findall(list);break;
                case 2:find_id(list);break;
                case 3:find_age(list);break;
                case 4:find_name(list);break;
                case 5:break out;
            }
        }

    }

    public static void findall(List list){
        for (int i = 0; i <list.size(); i++) {
            System.out.println("學生的資訊: "+list.get(i));
        }

    }
    public static void find_id(List list){
        System.out.print("請輸入要查詢學生的id:");
        Scanner sc =new Scanner(System.in);
        int id = sc.nextInt();
        for (int i = 0; i <list.size() ; i++) {
            Student o = (Student) list.get(i);
            if (o==null)break;
            if (o.getId().equals(id)){
                System.out.println("該學生的資訊: 年齡"+o.getAge()+"姓名:"+o.getName());
                break;
            }else {
                System.out.println("系統中不存在此學生資訊!!!!");
                break;
            }
        }
    }

    public static void find_age(List list){
        System.out.print("請輸入要查詢學生的age:");
        Scanner sc =new Scanner(System.in);

        int age = sc.nextInt();
        for (int i = 0; i <list.size() ; i++) {
            Student o = (Student) list.get(i);
            if (o==null)break;
            if (o.getAge().equals(age)){
                System.out.println("該學生的資訊: 年齡"+o.getAge()+"姓名:"+o.getName());
                break;
            }else {
                System.out.println("系統中不存在此學生資訊!!!!");
                break;
            }
        }
    }
    public static void find_name(List list){
        System.out.print("請輸入要查詢學生的name:");
        Scanner sc =new Scanner(System.in);
        String name = sc.next();
        for (int i = 0; i <list.size() ; i++) {
            Student o = (Student) list.get(i);
            if (o==null)break;
            if (o.getName().equals(name)){
                System.out.println("該學生的資訊: 年齡"+o.getAge()+"姓名:"+o.getName());
                break;
            }else {
                System.out.println("系統中不存在此學生資訊!!!!");
                break;
            }
        }
    }


}

*** 使用集合實現鬥地主遊戲的部分功能,要求如下:
(1)首先準備 54 張撲克牌並打亂順序。
(2)由三個玩家交替摸牌,每人 17 張撲克牌,最後三張留作底牌。
(3)檢視三個玩家手中的撲克牌和底牌。
(4)其中玩家手中的撲克牌需要按照大小順序列印,規則如下:
手中撲克牌從大到小的擺放順序:大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3**

       public static void main(String[] args) {
        *  *//*
        * 1: 準備牌操作
        *//*
        //1.1 建立牌盒 將來儲存牌面的
        List<String> pokerBox = new ArrayList<String>();
        //1.2 建立花色集合
        List<String> colors = new ArrayList<String>();

        //1.3 建立數位集合
        ArrayList<String> numbers = new ArrayList<String>();

        //1.4 分別給花色 以及 數位集合新增元素
        colors.add("♥");
        colors.add("♦");
        colors.add("♠");
        colors.add("♣");

        for(int i = 2;i<=10;i++){
            numbers.add(i+"");
        }
        numbers.add("J");
        numbers.add("Q");
        numbers.add("K");
        numbers.add("A");
        //1.5 創造牌  拼接牌操作
        // 拿出每一個花色  然後跟每一個數位 進行結合  儲存到牌盒中
        for (String color : colors) {
            //color每一個花色
            //遍歷數位集合
            for(String number : numbers){
                //結合
//                    String card = color+number;
                //儲存到牌盒中
                pokerBox.add(color+number);
            }
        }
        //1.6大王小王
        pokerBox.add("小☺");
        pokerBox.add("大☠");
        // System.out.println(pokerBox);
        //洗牌 是不是就是將  牌盒中 牌的索引打亂
        // Collections類  工具類  都是 靜態方法
        // shuffer方法
        *//*
         * static void shuffle(List<?> list)
         *     使用預設隨機源對指定列表進行置換。
         *//*
        //2:洗牌
        Collections.shuffle(pokerBox);
        //3 發牌
        //3.1 建立 三個 玩家集合  建立一個底牌集合
        ArrayList<String> player1 = new ArrayList<String>();
        ArrayList<String> player2 = new ArrayList<String>();
        ArrayList<String> player3 = new ArrayList<String>();
        ArrayList<String> dipai = new ArrayList<String>();

        //遍歷 牌盒  必須知道索引
        for(int i = 0;i<pokerBox.size();i++){
            //獲取 牌面
            String card = pokerBox.get(i);
            //留出三張底牌 存到 底牌集合中
            if(i>=51){//存到底牌集合中
                dipai.add(card);
            } else {
                //玩家1   %3  ==0
                if(i%3==0){
                    player1.add(card);
                }else if(i%3==1){//玩家2
                    player2.add(card);
                }else{//玩家3
                    player3.add(card);
                }
            }
        }
        Collections.sort(player1, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                char c1 = o2.charAt(1);
                char c = o1.charAt(1);
                return c1-c;
            }
        });
        System.out.println("令狐沖:"+player1);
        System.out.println("田伯光:"+player2);
        System.out.println("綠竹翁:"+player3);
        System.out.println("底牌:"+dipai);
    }
*/

public class Test_05 {

    // 建立牌盒 將來儲存牌面的
    private static HashMap<Integer,String> pokerBox = new HashMap<>();
    private static List<Integer> order=new ArrayList();
    private static String[] value = { "大☠", "小☺", "2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3" };
    private static String[] type = { "♥", "♠", "♣", "♦" };
    //3.1 建立 三個 玩家集合  建立一個底牌集合
    private static ArrayList<Integer> player1 = new ArrayList<>();
    private static ArrayList<Integer> player2 = new ArrayList<>();
    private static ArrayList<Integer> player3 = new ArrayList<>();
    private static ArrayList<Integer> dipai = new ArrayList<>();
    public static void main(String[] args) {

      prepare();//準備一副牌
        sf();//洗牌
        deal();//發牌
        show();//展示牌



    }
    //打亂牌
    public static void sf(){

        Collections.shuffle(order);
    }

    /**
     * 1: 準備牌操作
     */

    public static void prepare(){
        int index = 1;
        for (int i = 0; i < value.length; i++) {
            for (int j = 0; j < type.length; j++) {
                if (i < 2) {
                    pokerBox.put(index, value[i]);
                    order.add(index);
                    index++;
                    break;
                } else {
                    pokerBox.put(index, type[j] + value[i]);
                    order.add(index);
                    index++;

                }
            }

        }

    }

    /**
     * 發牌
     * 遍歷 牌盒  必須知道索引
     */
    public static void deal(){
        int card_id;
        for(int i = 0;i<order.size();i++){
            //獲取 牌面
             card_id = order.get(i);
            //留出三張底牌 存到 底牌集合中
            if(i>=51){//存到底牌集合中
                dipai.add(card_id);
            } else {
                //玩家1   %3  ==0
                if(i%3==0){
                    player1.add(card_id);
                }else if(i%3==1){//玩家2
                    player2.add(card_id);
                }else{//玩家3
                    player3.add(card_id);
                }
            }
        }
        Collections.sort(player1);
        Collections.sort(player2);
        Collections.sort(player3);
        Collections.sort(dipai);

    }
    private static void printCards(List<Integer> l) {
        for (Integer integer : l) {
            System.out.print(pokerBox.get(integer) + " ");
        }
    }

    public static void show(){

        System.out.println("\n令狐沖:"); printCards(player1);
        System.out.println("\n田伯光:");printCards(player2);
        System.out.println("\n綠竹翁:");printCards(player3);
        System.out.println("\n底牌:");printCards(dipai);
    }


}