有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何将两个变量保存到一个向量中?

class Buffer{
  public String name;
  public int id;
}

public class Main {
    public static void main(String[] args) {
      Vector<Buffer> vec = new Vector<Buffer>();
      getName = G.sIn.ReadInputLine();
      getID = G.sIn.ReadInt();
      vec.name.add(getName); // error
      vec.id.add( getID );  // error

    }
}

我是Java新手

然而,我想将两个变量保存到vector的name和id中并继续

现在,我不知道如何正确地实现


共 (3) 个答案

  1. # 1 楼答案

    一个vector就像一个有序的列表,类似于arrayList。在您的实现中,它没有nameid属性。是你的Buffer类拥有它们。你把它声明为一个缓冲向量。所以这更正确:

    class Buffer{
      public String name;
      public int id;
    }
    
    public class Main {
        public static void main(String[] args) {
          Vector<Buffer> vec = new Vector<Buffer>();
          getName = G.sIn.ReadInputLine();
          getID = G.sIn.ReadInt();
          Buffer buf = new Buffer();
          buf.name = getName;
          buf.id = getID;
          vec.add(buf);
        }
    }
    

    如果Buffer类有一个构造函数,那么创建它的速度会更快,而不需要buf变量和vec.add(new Buffer(getID, getName));

  2. # 2 楼答案

    class Buffer{
      public String name;
      public int id;
    }
    
    public class Main {
        public static void main(String[] args) {
          Vector<Buffer> vec = new Vector<Buffer>();
          getName = G.sIn.ReadInputLine();
          getID = G.sIn.ReadInt();
          vec.name.add(getName); // error this can't work. vec isn't a Buffer
          vec.id.add( getID );  // error same problem    
        }
    }
    

    您需要存储缓冲区的实例,而不是它们的变量:

    public class Main {
        public static void main(String[] args) {
          Vector<Buffer> vec = new Vector<Buffer>();
          Buffer tmp = new Buffer();
          vec.add(tmp); // this will work, you add a Buffer, but it will have default (0's) for the values
        }
    }
    

    使用您的输入,修改版本:

    public class Main {
        public static void main(String[] args) {
          Vector<Buffer> vec = new Vector<Buffer>();
          Buffer tmp = new Buffer();
          tmp.name = G.sIn.ReadInputLine();
          tmp.id = G.sIn.ReadInt();
          vec.add(tmp); // this will work, you add a Buffer, but it will have default (0's) for the values
        }
    }
    

    不过,我建议大家仔细阅读一下命名惯例

  3. # 3 楼答案

    vec本身不是Buffer类的实例,因此无法访问vecBuffer类的数据成员或方法

    vec是一个可以包含Buffer类实例的列表

    Vector<Buffer> vec = new Vector<Buffer>();
    getName = G.sIn.ReadInputLine();
    getID = G.sIn.ReadInt();
    
    // create an instance of Buffer class
    Buffer buff = new Buffer();
    buff.name = getName;
    buff.id = getID;
    
    // add the instance of Buffer class in vec
    vec.add(buff);
    

    但是,在类中包含public数据成员不是一个好的实践。Buffer类的所有数据成员都应该是private,并且应该使用constructor初始化

    class Buffer{
      private String name;
      private int id;
    
      public Buffer(String name, int id) {
          this.name = name;
          this.id = id;
      }
    }
    
    public class Main {
        public static void main(String[] args) {
            Vector<Buffer> vec = new Vector<Buffer>();
            getName = G.sIn.ReadInputLine();
            getID = G.sIn.ReadInt();
    
            // create an instance of Buffer class
            Buffer buff = new Buffer(getName, getID);
    
            // add the instance of Buffer class in vec
            vec.add(buff);
        }
    }
    

    要访问或设置类的private数据成员的值,需要在Buffer类中定义Getter and Setter函数