Java-累加器变量在每次循环迭代后不增加

时间:2018-09-20 16:44:17

标签: java loops output

汽车离开时,应在车牌上显示汽车在车库内移动的次数。我当前得到的输出显示一切正常,但是所有汽车的移动次数均保持为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

Garage Tester类

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 :(得分:1)

您的参数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
}

答案 1 :(得分:1)

在您的递增方法中,Car.java中应这样;

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

还可以修复此方法的其他用法。无需将任何数据发送到新值。汽车对象具有一个movesCount字段。也就是说,它可以增加movesCount本身。

如果您不想更改方法签名,请使用它;

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

但是使用最后一个解决方案时要小心,因为您将param发送为;

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);
相关问题