2016-09-22 6 views
0

У меня было много проблем в моем коде из-за статических методов и переменных. Я новичок в программировании, и я заметил, что когда статирую в классе, я могу назвать его везде, где захочу. Ниже приведен мой предыдущий вопрос (если вам нужно, просто зачем пытаться не использовать статический), где кто-то сказал мне удалить статическую информацию для метода, который решил часть моей проблемы.Метод доступа из другого класса Нет статического?

PS: английский - это мой третий язык, поэтому это может быть плохо. Но, пожалуйста, помогите мне, я застрял

Get random object from arraylist specific variable

Так моя проблема:

У меня есть конструктор для создания автомобилей и параметр заполняются функциями. Но поскольку объект еще не создан, я не могу получить методы. Есть ли способ, которым я не могу назвать их? Это мой код:
Прямо сейчас Cars.getPosition() Подчеркнуто красным цветом и его указание сделать его статичным.

Из класса гаража, где создаются машины:

public void addCar() { 
    Cars car = new Cars(Cars.getID(), Cars.askCarID(), Cars.getPosition(), Attendant.askForAtt(), System.currentTimeMillis()); 
    myGarage.add(car); 
    if(!(car.getAssignedTo()).equals(null)){ 
     car.getAssignedTo().setAssign(car); 
     car.getAssignedTo().setAvailable(false); 
    } 
} 

От класса автомобиля:

private static void createCarsID() { 

    for (int x = 0; x < Garage.getCarsCapacity(); x++) { 
     String tempCarID = ("CR" + (x + 1)); 
     tempArray2.add(tempCarID); 
    } 
} 

public static String getID() { 

    createCarsID(); 
    String tempID = null; 
    String tempPos = null; 
    for (int x = 0; x < Garage.getCarsCapacity(); x++) { 
     if (tempArray2.get(x) != null) { 
      tempID = tempArray2.get(x); 
      tempPos = tempArray2.get(x); 
      tempArray2.remove(tempArray2.get(x)); 
      getPos(tempPos); 
      //tempArray2.get(x) = null; 
      break; 
     } 
    } 
    return tempID; 
} 

public void getPos(String IdToPos) { 
    String strPos = IdToPos.substring(2); 
    int pos = Integer.parseInt(strPos); 
    position = "GR" + pos; 

} 
+1

Ваш геттер и сеттер не должны быть статичными, они используются, чтобы получить или установить данные об объекте автомобиля (например) не на Класс автомобиля. Если вы хотите потоковой линии или упростить процесс создания автомобиля, пожалуйста, используйте шаблон Builder. Если вы хотите предоставить некоторые случайные данные при создании класса, переместите его за пределы своего класса Car, например, сделайте класс CarDataProvider и добавьте туда эти статические функции. –

ответ

0

Это лишь один из способов, вы можете сделать это. Информация о новом автомобиле берется с клавиатуры, но не обязательно должна быть такой.

Garage.java

package yourPackage; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 
import java.util.Scanner; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

/** 
* 
* @author Víctor Bernabé Pérez 
*/ 
public class Garage { 

    private final Scanner scanInt = new Scanner(System.in); 
    private final InputStreamReader inStream = new InputStreamReader(System.in); 
    private final BufferedReader scanText = new BufferedReader(inStream); 
    private final ArrayList<Car> cars; 

    public Garage() { 
     cars = new ArrayList<>(); 
    } 

    public void addCar() { 
     try { 
      System.out.print("id"); 
      int id = scanInt.nextInt(); 
      System.out.print("carId"); 
      int carId = scanInt.nextInt(); 
      System.out.print("position"); 
      int position = scanInt.nextInt(); 
      long timeMillis = System.currentTimeMillis(); 
      System.out.print("Attendant"); 
      String attendant = new String(); 
      try { 
       attendant = scanText.readLine(); 
      } catch (IOException ex) { 
       Logger.getLogger(Garage.class.getName()).log(Level.SEVERE, null, ex); 
      } 
      boolean free; 
      String available = scanText.readLine(); 
      if (available.equals("s")) { 
       free = true; 
      } else { 
       free = false; 
      } 

      cars.add(new Car(id, carId, position, attendant, timeMillis, free)); 
     } catch (IOException ex) { 
      Logger.getLogger(Garage.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
} 

Car.java

package yourPackage; 

/** 
* 
* @author Víctor Bernabe Pérez 
*/ 
public class Car { 

    private int id, carId, position; 
    private long timeMillis; 
    private String attendant; 
    private boolean available; 

    public Car(){ 
     //Nothing, just default constructor 
    } 

    public Car(int id, int carId, int position, String attendant, long timeMillis, boolean available){ 
     this.id = id; 
     this.carId = carId; 
     this.position = position; 
     this.attendant = attendant; 
     this.timeMillis = timeMillis; 
     this.available = available; 
    } 
} 
+0

Я не могу быть такой строкой, как CR1 или Pos1. – Kavi

+0

, и система должна быть той, которая ей дана – Kavi

+0

Вы отправили свой код частично, поэтому я не вижу полей ваших классов или основной логики. Но вы можете решить это, просто прекратите пытаться создать объект с информацией, которая должна быть возвращена из этого объекта. Я могу помочь вам с точным решением, если вы разместите весь свой код. – Haddex

Смежные вопросы