Clasa auto cu accelerație și frânare (Programare, Java)

javaGuy123456 a intrebat.

Sunt într-o clasă de introducere în java și am probleme cu o clasă de mașină care a fost atribuită. Aici sunt instrucțiunile: Scrieți o clasă numită Car care să aibă următoarele câmpuri (atribute):

yearModel (un int care conține modelul anului mașinii)

make (un String care conține marca mașinii)

speed (un int care conține viteza curentă a mașinii)

Adresa Car ar trebui să aibă următorul constructor ș i alte metode:

Constructor – Acceptă datele mașinii year model și make ca argumente.

Accessors (getters) pentru obiectul yearModel, make, și speed ale obiectului

Metode:accelerate – de fiecare dată când este apelată, ar trebui să adauge 5 la speed câmpbrake – de fiecare dată când este apelată, ar trebui să scadă 5 la câmp. speed câmpul

Scrieți un Driver clasă, în care DrivingSimulation care face următoarele:

Solicită utilizatorului să introducă valoarea yearModel, make, și speed valorile unei mașini.Creați o clasă Car obiect Apelarea obiectului accelerate de 5 ori – după fiecare apel, utilizați metoda accessor pentru a afișa valoarea curentă speed al mașiniiApelează metoda brake de 5 ori – după fiecare apel, utilizați metoda accessor pentru a afișa curentul speed al mașinii

Am realizat cea mai mare parte, dar nu primește datele de viteză pe care le introduc și, în schimb, pornește de la valoarea implicită, 0. Iată clasa mea de mașină

  package drivingsimulation;

/**
*
* @author Carlos
*/

public class Car {
private int yearModel;
private String make;
private int speed; 

public Car(int yearModel, String make) {
    this.yearModel = yearModel;
    this.make = make;
}

public int getYearModel() {
    return yearModel;
}

public String getMake() {
    return make;
}

public int getSpeed() {

   System.out.println("You are going " + speed + " mph");
    return speed;

}

public void accelerate() {

     speed += 5;

}


public void brake () {

     speed-=5;

}





}

Și aici este clasa mea de șofer:

/*

package drivingsimulation;
import java.util.Scanner;
/**
 *
 * @author Carlos
 */
public class DrivingSimulation {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {

    int yearModel=0;
    int speed=0;
    String make=null;


    Scanner keyboard = new Scanner (System.in);

    Car myCar = new Car(yearModel, make);

    System.out.println("What is the year of your car? ");
    yearModel = keyboard.nextInt();

    System.out.println("What is the make of your car? ");
    make = keyboard.next();

    System.out.println("How fast is your car going?  ");
    speed = keyboard.nextInt();



    for(int i=0; i<5; i++){


        myCar.accelerate();

    }
}

}

3 răspunsuri
m_callens

Păi ai un accesor pentru membrul clasei speed dar nu ai un setter pentru când primești valoarea de la intrarea utilizatorului în clasa driver.

O metodă în clasa Car așa cum ar fi aceasta:

public void setSpeed(int speed)
{
    this.speed = speed;
}

Va fi valoarea setată pentru instanța de mașină a fost dat de intrare de utilizator.

Puteți să o apelați după introducerea de către utilizator a vitezei, după cum urmează…

myCar.setSpeed(speed);

Hovercraft plin de anghile

De unde știi că nu primește informații despre viteză – nu apelezi niciodată la getSpeed() niciodată nu o apelezi.

Sugestii:

  • Sună la getSpeed() dacă doriți să vedeți care este viteza.
  • Scoateți toate println-urile din clasa Car. Acestea ar trebui să fie doar în metoda principală în prezent.
  • Dați clasei o metodă setter pentru viteză… public void setSpeed(int speed), și apelați metoda.

De exemplu, getSpeed() ar trebui să fie doar

public int getSpeed() {
   return speed;
}

Asta este tot și nimic mai mult. Dar ați putea să o apelați astfel:

System.out.println("Car's speed: " + myCar.getSpeed());

De asemenea, nu aveți un public void setSpeed(int speed) și aveți nevoie de una și ar trebui să o apelați după ce ați obținut informațiile de la utilizator.

Comentarii

  • Mulțumesc foarte mult, am uitat complet de setter –  > Por javaGuy123456.
Cash LeBrun

Adăugați o setSpeed() setter în clasa Car și apelați-l în clasa DrivingSimulation ca mai jos (de asemenea, mutați instrucțiunea print în DrivingSimulation pentru ca mașina să rămână modulară).

public class Car {

    private int yearModel;
    private String make;
    private int speed;

    public Car(int yearModel, String make) {
        this.yearModel = yearModel;
        this.make = make;
    }

    public int getYearModel() {
        return yearModel;
    }

    public String getMake() {
        return make;
    }

    public int getSpeed() {
        return speed;
    }

    public void setSpeed(int speed) {
        this.speed = speed;
    }

    public void accelerate() {
        speed += 5;
    }

    public void brake () {
        speed -= 5;
    }
}

și…

import java.util.Scanner;

public class DrivingSimulation {

    public static void main(String[] args) {

        int yearModel = 0;
        String make = null;
        int speed;

        Scanner keyboard = new Scanner(System.in);

        Car car = new Car(yearModel, make);

        System.out.println("What is the year of the car?");
        yearModel = keyboard.nextInt();

        System.out.println("What is the make of the car?");
        keyboard.nextLine(); // fixes bug - receives the Enter key without skipping make = keyboard.nextLine()
        make = keyboard.nextLine();

        System.out.println("What speed is the initial speed of the car?");
        speed = keyboard.nextInt();
        car.setSpeed(speed);

        for (int i = 0; i < 5; i ++) {
            car.accelerate();

            System.out.println("Your " + yearModel + " " + make + 
            " is traveling at " + car.getSpeed() + " MPH.");
        }
    }
}

Comentarii

  • Cum aș putea tipări anul, modelul și marca folosind cealaltă clasă, similar cu getSpeed? –  > Por javaGuy123456.
  • Din moment ce ar trebui să creați un obiect Mașină și apoi să faceți ca acesta să efectueze o acțiune, ați putea copia totul din metoda principală în cealaltă clasă și ar funcționa. Dacă ați încerca să modificați instrucțiunea print originală în interiorul getSpeed(„Your ” + getYearModel() + ” ” + getMake()…) etc., yearModel și make ar apărea ca fiind 0 și null, deoarece obiectul este declarat în clasa DrivingSimulation. Sunt sigur că există o modalitate de a forța clasa Car să tipărească totul într-un alt mod, dar nu știu cum și probabil că nu ar fi o modalitate acceptabilă de a face lucrurile orientată pe obiecte. –  > Por Cash LeBrun.

Tags: