Как я могу сохранить две переменные в вектор? - PullRequest
3 голосов
/ 19 июня 2020
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.

Однако я хочу сохранить две переменные в имени и идентификаторе вектора и продолжать работу.

Теперь я не не умею правильно реализовывать enet.

Ответы [ 3 ]

1 голос
/ 19 июня 2020

A vector аналогичен упорядоченному списку, как arrayList. В вашей реализации у него нет свойства name или id. Они есть в вашем классе 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));

1 голос
/ 19 июня 2020
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    
    }
}

Вам необходимо хранить экземпляры Buffer, а не их переменные:

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
    }
}

Тем не менее, я бы рекомендовал чтобы прочитать соглашения об именах.

1 голос
/ 19 июня 2020

vec сам по себе не является экземпляром класса Buffer, поэтому вы не можете получить доступ к элементам данных или методам класса Buffer на vec.

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 класса, вам необходимо определить функции Getter и Setter в классе Buffer.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...