首页 > 解决方案 > 我想替换元素

问题描述

我的名字是地球000。

我想改变人们的顺序,我想把每个人都AT()联系起来。

与公开课Lead详细讲解,

白色,zap 黑色,zap 黄色,kaboom

      ↓ li.swap()

黑色,zap 黄色,kaboom 白色,zap

请检查猎人,剑士,牧师和团体。另一个代码是问题陈述的副本。



public class Human {
  private String name;

  public String getName() {
    return name;
  }

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

  public Human() {
    setName("no name");
  }

  public Human(String name) {
    this();
    setName(name);
  }

}

/////////////

public class Hunter extends Human{
   
  public Hunter(){}

  public Hunter(String name){
    super(name);
  }
  public String attack(){
    return "Yaa"; 
  }
}

///////

public class Swordman extends Hunter{
  public Swordman(){
  
  }
  public Swordman(String name){
    super(name);
  }
    
  public String attack(){
    return "zap";
  }
}

/////////////////

public class Clergyman extends Hunter{
 
  public clergyman(){  } 

  public clergyman(String name){
    super(name);
  }
  
  public String attack(){
    return "kaboom";
  }
}

///////////

import java.util.StringJoiner;
import java.util.ArrayList;
public class Humans <T extends Human> {
  ArrayList<T> people;
  public Humans() {
    people = new ArrayList<>();
  }
  public void add(T one) {
    people.add(one);
  }
  public int size() {
    return people.size();
  }

  @Override

  public String toString() {
    StringJoiner j = new StringJoiner(", ");
    for (T one : people)
      j.add(one.getName());
    return j.toString();
  }
}

///////////

import java.util.StringJoiner;
public class Group extends Humans<Hunter>{
  public Group(){
    super();
  }
  public void swap(){
   
    String lead = people(0);
      
    for(int i=0;i<size()-1;i++){
      people(i) = people(i+1);
    }

    people(size()-1) = lead;

    if(size()<=1){return;}
       
  }
  public String everyoneAT(){
    StringJoiner j = new StringJoiner(", ");
    for(T one : people){
       j.add(one.Attack());
     return j.toString();
    }
  }
}


//////////////////////First challenge


import java.human.*;
public class First{
  public static void main(String[] args){
    Group li = new Group();
    li.add(new Swordman("white"));
    li.add(new Swordman("black"));
    li.add(new Clergyman("yellow"));
    System.out.println(li);
    System.out.println(li.everyoneAT());
    li.swap();
    System.out.println(li);
    System.out.println(li.everyoneAT());
  }
}


/////////Second challenge

import java.Human.*;
public class Second{
  public static void main(String[] args){
    Group li = new Group();
    System.out.println(li);
    System.out.println(li.everyoneAT());
    li.swap();
    System.out.println(li);
    System.out.println(li.everyoneAT());
  }
}


///Third challenge

import java.human*;
public class Third{
  public static void main(String[] args){
    Group li = new Group();
    li.add(new Swordman("white"));
    System.out.println(li);
    System.out.println(li.everyoneAT());
    li.swap();
    System.out.println(li);
    System.out.println(li.everyoneAT());
  }
}


标签: java

解决方案


你在Group课堂上犯了一些小错误。

首先,有必要了解ArrayList通过索引从 an 中检索元素的正确方法。您应该检索为people.get(0). 另外,在您的情况下,people是猎人列表,因此您不能将其分配给String班级。您应该将其分配给如下Hunter类型:

    Hunter lead = people.get(0);

此外,要将项目添加到 中的特定索引ArrayList,您应该调用add将索引作为第一个参数传递。因此,您的方法应如下所示:

    public void swap() {
        Hunter lead = people.get(0);

        for (int i = 0; i < size() - 1; i++) {
            people.add(i, people.get(i + 1));
        }

        people.add(size() - 1, lead);

        if (size() <= 1) {
          return;
        }
    }

你的everyoneAT方法也有错误。people是 的列表Hunter,因此您的 for 循环应如下所示:

    for (Hunter one : people) {
        j.add(one.attack());
    }

推荐阅读