Poniżej znajduje się klasa kierowcy, którą otrzymałem i nie wolno mi edytować / zmienić tę klasę

public class HW2tester
{
   public static void main(String[] args)
   {
      Car car1 = new Car();
      Car car2 = new Car("Ford", 2013, 20000);
      Car car3 = new Car("Audi", 2012, 25000);
      Car car4 = new Car();

  car2.setPrice(22000);
  car2.setYear(2011);

  car4.setBrand("Cadillac");

  System.out.println("This car is " + car1.getBrand() + ", year " + car1.getYear() + ", price " + car1.getPrice());
  System.out.println("This car is " + car2.getBrand() + ", year " + car2.getYear() + ", price " + car2.getPrice());
  System.out.println("This car is " + car3.getBrand() + ", year " + car3.getYear() + ", price " + car3.getPrice());
  System.out.println("This car is " + car4.getBrand() + ", year " + car4.getYear() + ", price " + car4.getPrice());

  System.out.println("The total car number is: " + car1.getNumber());
  System.out.println("The total car number is: " + car2.getNumber());
  System.out.println("The total car number is: " + car3.getNumber());
  System.out.println("The total car number is: " + car4.getNumber());
   }
}

To jest plik klasy Car.java, który stworzyłem

public class Car
{
   private int year;
   private String brand;
   private int price;
   private int number;

public Car()
{
   year = 0;
   brand = null;
   price = 0;
   number = 0;
}

public Car( int y, String b, int p)
{
   number++;
   year = y;
   brand = b;
   price = p;
}

public void setYear( int y)
{
   year = y;
}

public void setBrand( String b)
{
   brand = b; 
}

public void setPrice( int p)
{
   price = p;
}

public int getYear()
{
   return year;
}

public String getBrand()
{
   return brand;
}

public int getPrice()
{
   return price;
}

public int getNumber()
{
   return number;
}

}   

Problemy Mam: Próbowanie włączenia liczenia do wyświetlania całkowitej liczby samochodów (4) Pierwszy obiekt samochodowy CAR1 i ostatni samochód4 nie są wyświetlane z powodu pustego klasy kierowcy i nie mogę zmienić klasy testera, tylko moja klasa samochodowa.

Jak wygląda wyjście

This car is Chevy, year 2005, price 3000
This car is Ford, year 2011,price 22000
This car is Audi, year 2012, price 25000
This car is Cadillac, year 2005, price 3000
The total car number is: 4
The total car number is: 4
The total car number is: 4
The total car number is: 4

edytuj Wprowadziłem zmiany do mnie, ale otrzymuję komunikat o błędzie o strumieniu do konwersji Int z jakiegoś powodu. Oto zmiany, które zrobiłem, a otrzymuję komunikat o błędzie.

public class Car
{
   int year;
   String brand;
   int price;
   static int number;

public Car()
{
   year = 2005;
   brand = "Chevy";
   price = 3000;
   number++;
}

HW2tester.java:6: error: incompatible types: String cannot be converted to int
      Car car2 = new Car("Ford", 2013, 20000);
                         ^
HW2tester.java:7: error: incompatible types: String cannot be converted to int
      Car car3 = new Car("Audi", 2012, 25000);
                     ^
-1
Anthony Berrios 26 luty 2019, 20:52

2 odpowiedzi

Najlepsza odpowiedź

Problem polega na twoim Domyślny konstruktor:

public Car()
{
   year = 0;
   brand = null;
   price = 0;
   number = 0;
}

Wszystko jest ustawione na 0 lub null, co oznacza, że rzeczywiste wyjście (choć w momencie tego pisania nie napisałeś go jeszcze) jest prawdopodobnie czymś w rodzaju:

This car is , year 0, price 0
This car is Ford, year 2011,price 22000
This car is Audi, year 2012, price 25000
This car is Cadillac, year 0, price 0
The total car number is: 0
The total car number is: 4
The total car number is: 4
The total car number is: 0

Lub coś w tym celu. To dlatego, że ustawisz wszystkie zmienne członkowskie do 0 lub null.

Spróbuj zmienić domyślny konstruktor do czegoś takiego:

public Car()
{
   // This car is Chevy, year 2005, price 3000
   year = 2005;
   brand = "Chevy";
   price = 3000;
   number = 4;
}

W ten sposób, kiedy instancji (i. E. Utwórz) obiekt bez parametrów (jak wykonane z samochodem 1 i samochodem 4), wypełnia te wartości automatycznie.

Edytuj: , jak Wskazał MOHD AKBAR, masz również inny problem z kodem, a to jest number jest Zmienna instancji, a nie a Statyczny.

Prawdopodobnie będziesz chciał zmienić numer, aby być bardziej jak Ten przykład, jak:

 static int number = 0;

I zmień swój konstruktor, aby to dopasować:

public Car()
{
   // This car is Chevy, year 2005, price 3000
   year = 2005;
   brand = "Chevy";
   price = 3000;
   number++;
}

Zamiast mojej oryginalnej sugestii number = 4;

Edytuj 2: Inny problem, jaki mógłbyś mieć, czy twoje argumenty są poza kolejnym konstruktorem:

public Car( int y, String b, int p)

Twoja inna klasa (ten, który otrzymałeś), oczekuje takich argumentów:

public Car(String b, int y, int p)

I to powinno naprawić inny problem, który masz.

0
Chipster 26 luty 2019, 21:16

Pierwszą rzeczą, którą musisz zrobić, jest dokonanie zmiennej "numer" zmiennej statycznej, dzięki czemu jest współdzielony przez wszystkie obiekty klasy, a nie kopia jest tworzona dla każdego obiektu. I musisz zwiększać "numer" zarówno w konstruktorach, jak i nie tylko sparametryzowanym konstruktorze.

private static int number;

A w konstruktorze musisz to zrobić

number++;

Sparodalizowany konstruktor utworzony przez użytkownika jest poprawny, a domyślny konstruktor przez "Chipsster" jest poprawny.

Mam nadzieję, że zrobiłem sobie.

1
Mohd Akbar 26 luty 2019, 19:00