如何通过姓名删除arraylist Room中的房间?

时间:2017-11-30 14:21:24

标签: java arraylist

我正在学习java。我在java程序中遇到arraylist问题。如何在房间中移除arraylist中的房间并计算大小小于40的房间数量。我只编写了MyRoom类中的removeRoom和countRoomBySize两种方法。我的代码在Net Beans中有错误。请任何人帮我查看这段代码。非常感谢。这是我的代码  我的主要课程

public class MyMain { 
public static void main(String[] args) {
    //create a list of rooms
    MyRoom m = new MyRoom();

    m.addRoom(new Room("HB201L",35));
    m.addRoom(new Room("HB401R",45));
    m.addRoom(new Room("211",30));

    m.sort();
    m.list();

    //1.
    m.removeRoom("211");
    m.list();


    //2.
    int c = m.countRoomBySize(40);
    System.out.println(c);//2
}   
}

教室

public class Room implements Comparable<Room> {
@Override
public int compareTo(Room o) {
    return o.name.compareToIgnoreCase(this.name);
}
//instanced variables
private int size;  
private String name;

public Room() {
    name = "";
    size = 0;
}

public Room(String name, int size) {
    this.name = name;
    this.size = size;
}

public int getSize() {
    return size;
}

public void setSize(int size) {
    this.size = size;
}

public String getName() {
    return name;
}

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

Class MyRoom

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class MyRoom implements IRoom {

List<Room> rooms;

public MyRoom() {
    rooms = new ArrayList();
}

@Override
public void addRoom(Room r) {
    //append r to the end of list rooms
    rooms.add(r);
}

@Override
public void list() {
    for (int i = 0; i < rooms.size(); i++) {
        Room r = rooms.get(i);
        System.out.printf("%-20s%-10d\n",r.getName(),r.getSize());
    }
}

@Override
public void removeRoom(){
    for (int i = 0; i < rooms.size(); i++) {
        if(rooms.get(i).getName() == "211")
            rooms.remove(rooms);
    }
}

@Override
public int countRoomBySize(){
     int s,i,n;
 n = rooms.size();
 s = 0;
 for(i=0;i<n;i++) {
   if(rooms.get(i).getSize() > 40) 
       s++;  
 }
 return(s); 
}

public void sort() {
    Collections.sort(rooms);
}   
}

Interface IRoom
public interface IRoom {
//only contain public members: constants and method declaration
public final int MAX = 10;
public void addRoom(Room r);
public void list();
public void removeRoom();
public int countRoomBySize();
}
interface A {
void f();
} 
interface B extends A {
void g();
}
interface C {}

3 个答案:

答案 0 :(得分:1)

首先更改您的界面IRoom,如下所示:

public void removeRoom(String name);
public int countRoomBySize(int size);

在MyRoom类中更改removeRoom方法,如下所示:

@Override
public void removeRoom(String name){
    for (int i = 0; i < rooms.size(); i++) {
        if(name.equalsIgnoreCase(rooms.get(i).getName())){
            rooms.removeIf(r -> r.getName().equals(name));
            System.out.println("Removed !");
        }
    }
}

这样的countRoomBySize方法:

@Override
public int countRoomBySize( int size){
     int s,i,n;
 n = rooms.size();
 s = 0;
 for(i=0;i<n;i++) {
   if(rooms.get(i).getSize() > size) 
       s++;  
 }
 return(s); 
}

祝你好运!

答案 1 :(得分:0)

很高兴你开始学习java。

这里最简单的解决方案是将您的房间放在Hashmap中并将房间号码存储为密钥;

public class MyMain { 
public static void main(String[] args) {

    Hashmap<String,Room> rooms = new Hashmap();
    rooms.add("211",new Room("HB201L",35);
    rooms.add("HB401R",new Room("HB401R",45);

    rooms.remove("211");
    int size = rooms.size();
    int smallRooms = calculateSmallRooms(rooms.values(),30);
    }


    private int calculateSmallRooms(Collection<Room> rooms, int minimalSize) {
    int smallRooms = 0;
    for(Room room: rooms) {
        if (room.size < minimalSize) {
          smallRooms++;
        }
    return smallRooms;
    }

答案 2 :(得分:0)

removeRoom可缩短为:rooms.remove(rooms.indexOf(&#34; 211&#34;))或甚至可能是rooms.remove(&#34; 211&#34;);