14--ArrayList相关习题

第一题

  • 键盘录入学生信息,保存到集合中。

     循环录入的方式,1:表示继续录入,0:表示结束录入。
     定义学生类,属性为姓名,年龄,使用学生对象保存录入数据。
     使用ArrayList集合,保存学生对象,录入结束后,遍历集合。
    
  • 代码实现,效果如图所示:
    在这里插入图片描述

  • 参考答案:

public class Test1 {
   public static void main(String[] args) {
       Scanner scanner = new Scanner(System.in);
       ArrayList<Student> list = new ArrayList<>();
       while (true) {
           System.out.println("1.录入信息 0.退出");
           int i = scanner.nextInt();
           switch (i) {
               case 1:
                   inputStu(list , scanner);
                   break;
               case 0:
                   System.out.println("录入完毕");
          }
           if (i == 0){
               break;
          }
      }

       for (int i = 0; i < list.size(); i++) {
           Student student = list.get(i);
           student.show();
      }
  }

   private static void inputStu(ArrayList<Student> list , Scanner sc) {
       System.out.println("请输入姓名:");
       String name = sc.next();
       System.out.println("请输入年龄:");
       int age = sc.nextInt();
       Student student = new Student(name, age);
       list.add(student);
  }
}

class Student{
   private String name;
   private int age;
   public Student() {
  }
   public Student(String name, int age) {
       this.name = name;
       this.age = age;
  }
   public String getName() {
       return name;
  }
   public void setName(String name) {
       this.name = name;
  }
   public int getAge() {
       return age;
  }
   public void setAge(int age) {
       this.age = age;
  }
   public void show() {
       System.out.println( "学生姓名=" + name + ", 年龄=" + age);
  }
}

第二题

  • 集合工具类。

     定义findIndex方法,在某集合中,查找某元素,返回第一次出现的索引。
     定义replace方法,将某集合中的某元素,全部替换为新元素。
    
  • 代码实现,效果如图所示:
    在这里插入图片描述

public class Test2 {
	    public static int findIndex(List<Integer> list, int i){
	        int index = -1;
	        for (int j = 0; j < list.size(); j++) {
	            if (list.get(j) == i) {
	                index = j;
	                break;
	            }
	        }
	        return index;
	    }
	    public static void replace(List<Integer> list,Integer oldValue,Integer newValue){
	        for (int i = 0; i < list.size(); i++) {
	            if (list.get(i) == oldValue) {
	                list.set(i, newValue);
	            }
	        }
	    }
	}

第三题

  • 模拟统计班级考试分数分布情况,分别统计100-80,79-60,59-40,39-0各个阶段的人数。

     定义getScoreList方法,随机生成50个数字,数字范围从0到100。
     定义countScore方法,统计各个阶段的分数个数。
     定义printCount方法,打印各个阶段的统计结果。
    
  • 代码实现,效果如图所示:
    在这里插入图片描述

  • 参考答案:

public class Test3 {
   public static void main(String[] args) {
       // 获取随机分数
       ArrayList<Integer> scoreList = getScoreList();
       // 定义计数的变量
       ArrayList<Integer> countList = countScore(scoreList);
       // 打印统计结果
       printCount(countList);
  }

   private static void printCount(ArrayList<Integer> countList) {
       int start = 100;
       int end = 80;
       for (int i = 0; i < countList.size(); i++) {
           Integer integer = countList.get(i);
           System.out.println(start + "\t分 --" + end + " \t分:" + integer+"人");
           if (i == 0){
               start-=21;
               end -=20;
          }else if (i == countList.size()-2){
               start-=20;
               end-=40;
          }else {
               start -= 20;
               end -= 20;

          }
      }
  }
   public static ArrayList<Integer> countScore(ArrayList<Integer> scoreList) {
       ArrayList<Integer> countList = new ArrayList<>();
       int count100 = 0;
       int count79 = 0;
       int count59 = 0;
       int count39 = 0;

       for (int i = 0; i < scoreList.size(); i++) {
           Integer score = scoreList.get(i);
           if (score <= 100 && score >= 80) {
               count100++;
          } else if (score <= 79 && score >= 60) {
               count79++;
          } else if (score <= 59 && score >= 40) {
               count59++;
          } else {
               count39++;
          }
      }

       countList.add(count100);
       countList.add(count79);
       countList.add(count59);
       countList.add(count39);

       return countList;
  }


   public static ArrayList<Integer> getScoreList() {
       ArrayList<Integer> list = new ArrayList<>();
       Random r = new Random();
       for (int i = 0; i < 50; i++) {
           int x = r.nextInt(100);
           list.add(x);
      }
       return list;
  }
}

第四题:

  • 随机生成n张扑克牌。

  • 代码实现,效果如图所示:
    在这里插入图片描述

  • 开发提示:

     使用集合保存所有的扑克牌对象。
     从所有牌中,随机移除n张牌,保存到新集合。
     判断n的值,不能超越一副扑克牌的范围。
    
  • 参考答案:

public class Test4 {
   public static void main(String[] args) {
       int n = 5;
       ArrayList<Card> cards = randomCard(n);

       if (cards != null) {
           System.out.println("随机"+ n +"张牌:" );
           for (int i = 0; i < cards.size(); i++) {
               Card card = cards.get(i);
               card.showCard();
          }
      }else {
           System.out.println(n+"超越范围,无法获取牌" );
      }

       System.out.println();
       System.out.println();
       int n2 = 55;
       ArrayList<Card> cards2 = randomCard(n2);

       if (cards2 != null) {
           System.out.println("随机"+ n2 +"张牌:" );
           for (int i = 0; i < cards.size(); i++) {
               Card card = cards.get(i);
               card.showCard();
          }
      }else {
           System.out.println("随机"+ n2 +"张牌:\r\n超越范围,无法获取" );
      }
  }
   public static ArrayList<Card> randomCard(int n) {
       if (n > 54 || n < 0)
           return null;

       ArrayList<Card> rList = new ArrayList<>();
       ArrayList<Card> cards = allCard();

       Random r = new Random();
       for (int i = 0; i < n; i++) {
           int index = r.nextInt(cards.size());
           Card rCard = cards.remove(index);
           rList.add(rCard);
      }
       return rList;
  }

   public static ArrayList<Card> allCard() {
       ArrayList<Card> allList = new ArrayList<>();
       // 花色数组
       String[] hs = {"黑桃", "红桃", "梅花", "方片"};
       // 点数数组
       String[] ds = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};

       for (int H = 0; H < hs.length; H++) {
           for (int d = 0; d < ds.length; d++) {
               Card card = new Card(hs[H], ds[d]);
               // 添加到集合
               allList.add(card);
          }
      }
       return allList;
  }
}

class Card {
   private String ds; // 点数
   private String hs; // 花色
   public Card(String ds, String hs) {
       this.ds = ds;
       this.hs = hs;
  }
   public void showCard() {
       System.out.print(ds + hs+" ");
  }
}

第五题

  • 自定义MyList类,实现存取元素的功能。

     定义add方法,可以保存元素,添加MyList尾部。
     定义remove方法,可以获取到最后添加的元素,并从MyList中移除该元素。
     定义show方法,可以展示MyList中的元素。
    
  • 代码实现,效果如图所示:
    在这里插入图片描述

  • 参考答案:

public class Test5 {
   public static void main(String[] args) {
       MyList myList = new MyList();
       for (int i = 0; i < 3; i++) {
           myList.add(i);
      }
       System.out.println("添加元素后:");
       myList.show();

       Integer remove = myList.remove();
       System.out.println("获取元素:");
       System.out.println(remove);
       System.out.println("获取元素后:");
       myList.show();
  }
}

class MyList {
   ArrayList<Integer> ml = new ArrayList<>();

   public void add(Integer i) {
       ml.add(i);
  }
   public Integer remove() {
       Integer remove = ml.remove(ml.size() - 1);
       return remove;
  }

   public void show(){
       System.out.println(ml);
  }
}

第六题

  • 自定义4个学生对象,添加到集合,并遍历
public class Test02ArrayList {
   public static void main(String[] args) {
//创建集合对象
       ArrayList<Student> list = new ArrayList<Student>();
//创建学生对象
       Student s1 = new Student("赵丽颖",18);
       Student s2 = new Student("唐嫣",20);
       Student s3 = new Student("景甜",25);
       Student s4 = new Student("柳岩",19);
//把学生对象作为元素添加到集合中
       list.add(s1);
       list.add(s2);
       list.add(s3);
       list.add(s4);
//遍历集合
       for(int x = 0; x < list.size(); x++) {
           Student s = list.get(x);
           System.out.println(s.getName()+"‐‐‐"+s.getAge());
      }
  }
}

第七题

  • 定义以指定格式打印集合的方法(ArrayList类型作为参数),使用{}扩起集合,使用@分隔每个元素。格式参照 {元素 @元素@元素}。
public class Test03ArrayList {
   public static void main(String[] args) {
// 创建集合对象
       ArrayList<String> list = new ArrayList<String>();
// 添加字符串到集合中
       list.add("张三丰");
       list.add("宋远桥");
       list.add("张无忌");
       list.add("殷梨亭");
// 调用方法
       printArrayList(list);
  }
   public static void printArrayList(ArrayList<String> list) {
// 拼接左括号
       System.out.print("{");
// 遍历集合
       for (int i = 0; i < list.size(); i++) {
// 获取元素
           String s = list.get(i);
// 拼接@符号
           if (i != list.size()1) {
               System.out.print(s + "@");
          } else {
// 拼接右括号
               System.out.print(s + "}");
          }
      }
  }
}

第八题

  • 定义获取所有偶数元素集合的方法(ArrayList类型作为返回值)
public class Test04ArrayList {
   public static void main(String[] args) {
// 创建Random 对象
       Random random = new Random();
// 创建ArrayList 对象
       ArrayList<Integer> list = new ArrayList<>();
// 添加随机数到集合
       for (int i = 0; i < 20; i++) {
           int r = random.nextInt(1000) + 1;
           list.add(r);
      }
// 调用偶数集合的方法
       ArrayList<Integer> arrayList = getArrayList(list);
       System.out.println(arrayList);
  }
   public static ArrayList<Integer> getArrayList(ArrayList<Integer> list) {
// 创建小集合,来保存偶数
       ArrayList<Integer> smallList = new ArrayList<>();
// 遍历list
       for (int i = 0; i < list.size(); i++) {
// 获取元素
           Integer num = list.get(i);
// 判断为偶数,添加到小集合中
           if (num % 2 == 0){
               smallList.add(num);
          }
      }
// 返回小集合
       return smallList;
  }
}

猜你喜欢

转载自blog.csdn.net/qq_44787898/article/details/106835796