Java - переменная аккумулятора не увеличивается после каждой итерации цикла - PullRequest
0 голосов
/ 20 сентября 2018

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

Класс автомобиля

package garagetester;

public class Car 
{
    private String licensePlate;//stores the license plate of the car as a String
    private int movesCount = 0;//stores the number of times the car has been 
                           //moved 


    public Car(String licensePlate)//builds a Car object with 
    {
       this.licensePlate = licensePlate;
    } 


    public String getLicensePlate() {
        return licensePlate;
    }


    public int getMovesCount() {
        return movesCount;
    }


    public void incrementMovesCount(int movesCount) {
        movesCount++;
     }
}//end of Car class

Класс гаража

package garagetester;


public class Garage {

private Car[] garage; //array, stores Car objects 
private final int LIMIT = 10; //determines length of the garage array 
private int count;//number of cars in garage 

public Garage() {
    garage = new Car[LIMIT];
    //creates an array of 10 elements 
    //first index = 0, last index = 9

public String arrive(Car newCar) {
    String str = ""; //stores the result of the ARRIVE operation            
    /* If the garage is empty, the first car to arrive is parked in 
            the first empty spot closest to the exit*/ 
    if (count != LIMIT) {
        garage[count] = newCar;
        count++;
        str = newCar.getLicensePlate() + " has been parked";
    } else {
        str = "Sorry, " + newCar.getLicensePlate() + " the garage is full.";
    }
    return str;
}//end of arrive()

public String depart(String plate) {
    String str = ""; //stores the result of executing the operation 
    int moves =0; //stores the number of times a car has been moved 
    boolean found = false; //flag 
    for (int i = 0; i < count - 1; i++) //for all elements in the array
    {
        //check if car with that plate number is in the garage 
        if (plate.equals(garage[i].getLicensePlate())) 
        {
            found = true; //car has been found 
            if (found)//if found=true 
            {
                //for all cars ahead of it 
                for (int j = i + 1; j < count; j++)//check if count or count-1
                {   
                    moves += garage[j].getMovesCount();
                    garage[j].incrementMovesCount(moves);
                }
                //for all cars behind it 
                for (int k = i; k > 0; k--) //or k=i-1, check when debugging 
                {
                    //move all cars behind it one position up
                    garage[k] = garage[k - 1];
                }
                str = plate + " has departed." + "it has been moved " + moves 
                        + " times. "; 
                count--; //decrease the number of cars in the garage by 1 
            }
            else 
                {
                    str = "Sorry " + plate + " is not in the garage.";
                }
            }
        }//end of for loop 
        return str;//prints the value stored in str            
    } //end of depart() 
} //end of Garage class

Класс гаражного тестера

package garagetester;

import java.io.*;
import java.util.Scanner;

public class GarageTester 
{
    public static void main(String[] args) throws FileNotFoundException, IOException 
    {
       //Initializes an array of 10 Car objects 
       Garage newGarage = new Garage();

       //initializes a Scanner object to read data from file 
       Scanner scan = new Scanner(new File("garage.txt"));

       //while there is tokens in the file 
       while (scan.hasNext()) 
       {
          String plate = scan.next();//stores the plate number read from file
          String action = scan.next();//stores the action read from file

           //evaluate action 
            switch (action) {
            //if action has the value "ARRIVE"
                case "ARRIVE": 
                    Car aCar = new Car(plate);//create a Car object
                    System.out.println(newGarage.arrive(aCar));//call arrive method
                    break;
                //if action has the value "DEPART"
                case "DEPART":
                    System.out.println(newGarage.depart(plate));//call the depart method 
                    break;
            } //end of switch case
        }//end of while
    }//end of main()
} //end of GarageTester class

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

В вашем методе приращения должно быть так в Car.java;

public void incrementMovesCount() {
    this.movesCount++;
 }

Также исправьте другое использование этого метода.Нет необходимости отправлять какие-либо данные на новое значение.Автомобильный объект имеет поле movesCount.Это означает, что он может увеличивать сам movesCount.

Если вы не хотите изменять сигнатуру метода, используйте это;

public void incrementMovesCount(int newMovesCount) {
    this.movesCount = newMovesCount;  //--newMovesCount refers to your calculation
 }

но будьте осторожны при использовании последнего решения, потому что вы отправляете параметр как:

moves += garage[j].getMovesCount();  //this moves never set to 0. Just equal to zero in the first iteration.
garage[j].incrementMovesCount(moves);

Я думаю, что это неправильно.Потому что я полагаю, вы хотите увеличить все позиции машины.Если вы хотите применить первое решение моего поста, просто исправьте ошибку компиляции.Но если вы хотите применить второе решение, просто измените эту часть следующим образом:

garage[j].incrementMovesCount(garage[j].getMovesCount()+1);
0 голосов
/ 20 сентября 2018

Ваш параметр movesCount скрывает члена класса movesCount.В следующем мутаторе:

public void incrementMovesCount(int movesCount) {
    // movesCount++; --> this is incrementing the parameter

    // either remove the parameter `movesCount` from this mutator
    // since it's not being used, or do the following
    this.movesCount++; // --> this refers to the class member movesCount
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...