Начинающий java последовательно увеличивает установленную переменную и сбрасывает счет - PullRequest
4 голосов
/ 13 марта 2020

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

Мой вопрос: когда я создаю объект, он начинается со счетчика префикса +, но не увеличивает его сразу, я хочу, чтобы он увеличивал первый созданный объект до 1001 и т. Д. и так далее. Эти сообщения об ошибках сбивают меня с толку из-за того, что ожидаемое значение полностью отличается от желаемого результата.

У меня установлен префикс и счетчик, который начинается с 1000.

 public static final String TICKET_PREFIX = "VAN";
    public static int counter = 1000;

public ParkingTicket(){
     ticketNumber = generateTicketNumber();
    }
        }
private String generateTicketNumber(){

ticketNumber = TICKET_PREFIX + counter++;
return ticketNumber;

}

Вот код из блока кода класса тестирования, в котором обнаружена ошибка

 @Test
    public void testConstructorTicketNumberSEquential() {
        ParkingTicket.resetCounter();
        ParkingTicket ticket = new ParkingTicket("Adam White","VAN5225", "1A2B3C",20 ); 
        ParkingTicket ticket2 = new ParkingTicket("Adam White","VAN5225", "1A2B3C",20 ); 
        ParkingTicket ticket3 = new ParkingTicket("Adam White","VAN5225", "1A2B3C",20 ); 
        assertEquals("VAN1001",ticket.getTicketNumber());
        assertEquals("VAN1003", ticket3.getTicketNumber()); 

, и это сообщение об ошибке от тестера

testConstructorTicketNumberSEquential
---
org.junit.ComparisonFailure: expected:<VAN100[1]> but was:<VAN100[7]>
    at org.junit.Assert.assertEquals(Assert.java:115)
    at org.junit.Assert.assertEquals(Assert.java:144)
    at ParkingTicketTest.testConstructorTicketNumberSEquential(ParkingTicketTest.java:238)

Также у меня есть метод для сброса счетчика. Я попытался просто вернуть значение счетчика, но я все еще получаю сообщение об ошибке

public static int resetCounter(){
        int reset = counter;
        return reset;
    }

для счетчика сброса

  @Test
    public void  testResetCounter() {
        ParkingTicket.resetCounter();
        assertEquals(1000,ParkingTicket.counter);
}

сообщение об ошибке запуска теста

testResetCounter
---
java.lang.AssertionError: expected:<1000> but was:<1005>
    at org.junit.Assert.fail(Assert.java:88)
    at org.junit.Assert.failNotEquals(Assert.java:743)
    at org.junit.Assert.assertEquals(Assert.java:118)
    at org.junit.Assert.assertEquals(Assert.java:555)
    at org.junit.Assert.assertEquals(Assert.java:542)
    at ParkingTicketTest.testResetCounter(ParkingTicketTest.java:264)

1 Ответ

1 голос
/ 13 марта 2020

В настоящее время вы никогда не устанавливаете counter обратно на начальное значение внутри resetCounter() и никогда не используете возвращаемое значение.

По моему мнению, resetCounter() должно быть void метод, и просто установите counter обратно на начальное значение, которое содержится в константе.

Я назвал эту константу INITIAL_COUNTER:

public static final String TICKET_PREFIX = "VAN";
public static final int INITIAL_COUNT = 1000;
public static int counter = INITIAL_COUNT;

public static void resetCounter() {
    counter = INITIAL_COUNT;
}

public static void main(String[] args) {
    counter++;
    counter++;
    System.out.println(counter);

    ParkingTicket.resetCounter();
    System.out.println(counter);
}

Выход:

1002
1000

Здесь из примера main, который я сделал, вы можете видеть, как resetCounter правильно сбрасывает counter обратно в 1000. Просто измените значение INTIAL_COUNT, чтобы изменить значение счетчика по умолчанию.


В другой заметке вы написали, что ожидаете, что VAN1001 будет значением билета вашего первого new ParkingTicket("Adam White","VAN5225", "1A2B3C",20 ), когда вы должны на самом деле ожидайте, что это будет VAN1000.

Это связано с использованием пост-инкремента на count вместо предварительного инкремента в строке ниже:

ticketNumber = TICKET_PREFIX + counter++;

Если вы хотите, чтобы первый билет начинался с 1001 вместо этого измените count++ на ++count, что увеличит счет на 1 до присвоения значения ticketNumber.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...