Nano Hash - криптовалюты, майнинг, программирование

Как мне получить свои 2 объекта и вызвать функцию, передающую через нее переменную?

В моем классе драйверов CarRaceSim в функции race я вызываю оба объекта car1 и car2. Затем я вызываю функцию ускорения и торможения из моего класса CarRace, которая должна добавлять и вычитать случайное число из переменной скорости, которая передается в ускорении и торможении. Переменная скорости представляет собой целое число, которому пользователь присваивает значение. Однако, когда я вызываю функцию и распечатываю ее, она отображает только то, что ввел пользователь. В целом программа должна имитировать 5 гонок, в которых на каждом круге (5 раз) автомобиль ускоряется и тормозит, поэтому я назвал ускорение и тормоз для обеих машин. Как я могу заставить ускорение и тормоз работать правильно?

package carrace;
import java.util.Random;
/**
 *
 * @author Daniel
 */
public class CarRace {

    int year, speed;
    String model, make;


    // default constructor
    public CarRace(){
        year = 2000;
        model = "";
        make = "";
        speed = 0;
    }

    // non-default constuctor
    public CarRace(int aYear, String aModel, String aMake, int aSpeed){
        this.year = aYear;
        this.model = aModel;
        this.make = aMake;
        this.speed = aSpeed;
    }

    public int getYear() {
        return year;
    }

    public void setYear(int year) {
        this.year = year;
    }

    public int getSpeed() {
        return speed;
    }

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

    public String getModel() {
        return model;
    }

    public void setModel(String model) {
        this.model = model;
    }

    public String getMake() {
        return make;
    }

    public void setMake(String make) {
        this.make = make;
    }

    public void accelerate(int speed){
        Random randomNum = new Random();
        int ranNum;

        ranNum = randomNum.nextInt(26) + 5;
        speed += ranNum; 
    }

    public void brake(int speed){
        Random randomNum = new Random();
        int ranNum;

        ranNum = randomNum.nextInt(26) + 5;
        speed -= ranNum; 
    }

    public String toString(){
        return "The year of the car is " + year + ", the model of the car is " + model + ", the make of the car is " + make + ", and the initial speed is " + speed + ".\n";
    }
}

package carrace;
import java.util.Scanner;
/**
 *
 * @author Daniel
 */
public class CarRaceSim {

    public static CarRace car1;
    public static CarRace car2;

    public static void main(String[] args) {

        System.out.println("Welcome to the car simulation program!");
        System.out.println("You will now begin to create your two cars to race, good luck!\n\n");

        createCar(1);
        createCar(2);

        race(car1, car2);
    }

    public static void createCar(int carCreation){
        Scanner keyboard = new Scanner(System.in);
        int year = 0;
        String model;
        String make;
        int speed = 0;

        do{
            if (carCreation == 1)
                System.out.println("Create your first car!");
            else
                System.out.println("Create your second car!");

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

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

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

            System.out.println("What speed is your car initially starting at? (0-60)");
            speed= keyboard.nextInt();

            if(speed < 0){
                System.out.println("You can not begin at a negative speed, please choose between 0-60.");
            }
            else if(speed > 60){
                System.out.println("You can not start above 60, please choose between 0-60.");
            }          

        }while(speed <= 0 && speed >= 60);

        if(carCreation == 1){
            car1 = new CarRace(year, model, make, speed);
            System.out.println(car1);
        }
        else{
            car2 = new CarRace(year, model, make, speed);
            System.out.println(car2);
        }    

    }

    public static void race(CarRace carUno, CarRace carDue){

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

            System.out.println("Lap " + i);

            System.out.println("Car 1's stats:");
            car1.accelerate(car1.getSpeed());
            System.out.println(car1.getSpeed());
            car1.brake(car1.getSpeed());
            System.out.println(car1.getSpeed());

            System.out.println("Car 2's stats:");
            car2.accelerate(car2.getSpeed());
            System.out.println(car2.getSpeed());
            car2.brake(car2.getSpeed());
            System.out.println(car2.getSpeed() + "\n");
        }
    }
}
10.04.2016

Ответы:


1

В вашей функции accelerate() вы присваиваете значение локальной переменной speed. То, что вы хотите присвоить, — это переменная класса this.speed, как и в других ваших методах (например, setMake()).

Другими словами изменить

speed += ranNum;

to

this.speed += ranNum;

Сделайте то же самое для вашей тормозной функции.

10.04.2016
  • Не могу поверить, что пропустил это, спасибо, я ценю это. 10.04.2016

  • 2

    Значение, которое вы изменяете в методах accelerate() и brake(), обновляется для переменной, которую вы передаете, а не для переменной скорости класса. Чтобы присвоить новое значение переменной скорости класса, добавьте следующую строку в ваши методы accelerate() и brake():

    //for accelerate() method
    //add below line after speed += ranNum;
    this.speed = speed;
    
    //for brake() method
    //add below line after speed -= ranNum;
    this.speed = speed;
    

    Также см. Скрытие переменной экземпляра для дальнейшего объяснения, почему вам нужно это сделать.

    10.04.2016

    3

    Вы должны изменить свой метод ускорения следующим образом:

    public void accelerate(int speed){
            Random randomNum = new Random();
            int ranNum;
    
            ranNum = randomNum.nextInt(26) + 5;
            this.speed += ranNum; 
        }
    

    Точно так же вы должны изменить метод торможения

    10.04.2016
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..