初学者java顺序递增集合变量并重置计数

初学者java顺序递增集合变量并重置计数,java,oop,methods,Java,Oop,Methods,我的类方法有一些小问题,我将按顺序递增。基本上,我的类是编译的,有一个测试类,当我运行测试仪以获得测试结果时,我没有得到我想要的输出,它后面是一条错误消息,我将在下面提供 我的问题是,当我创建一个对象时,它以前缀+计数器开始,但并没有立即增加它,我希望它能够立即将创建的第一个对象增加到1001,依此类推。这些错误消息让我感到困惑,因为期望值与期望输出完全不同 我设置了前缀和一个从1000开始的计数器 public static final String TICKET_PREFIX = "VAN

我的类方法有一些小问题,我将按顺序递增。基本上,我的类是编译的,有一个测试类,当我运行测试仪以获得测试结果时,我没有得到我想要的输出,它后面是一条错误消息,我将在下面提供

我的问题是,当我创建一个对象时,它以前缀+计数器开始,但并没有立即增加它,我希望它能够立即将创建的第一个对象增加到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)
重置计数器的测试

  @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)
testResetCounter
---
java.lang.AssertionError:应为:但为:
位于org.junit.Assert.fail(Assert.java:88)
位于org.junit.Assert.failNotEquals(Assert.java:743)
位于org.junit.Assert.assertEquals(Assert.java:118)
位于org.junit.Assert.assertEquals(Assert.java:555)
位于org.junit.Assert.assertEquals(Assert.java:542)
在ParkingTicketTest.testResetCounter(ParkingTicketTest.java:264)

您当前从未将
计数器
设置回
resetCounter()
中的初始值,也从未使用返回值

我认为,
resetCounter()
应该是一个
void
方法,只需将
counter
设置回常量中包含的初始值即可

我将这个常数命名为
初始\u计数器

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
。只需更改
initial_COUNT
的值即可更改默认的计数值


另一方面,您写道,您希望
VAN1001
成为您第一辆
新ParkingTicket(“Adam White”、“VAN5225”、“1A2B3C”、20)”的票款价值,而实际上您应该期望它是
VAN1000

这是因为在
count
上使用后增量,而不是在下一行上使用预增量:

ticketNumber = TICKET_PREFIX + counter++;

如果您希望第一张票证从
1001
开始,请将
count++
更改为
++count
,这将在分配
ticketNumber
值之前将count增加1。

重置计数器返回的值将被忽略,您不会将其分配给任何对象。相反,在该方法中,您应该将计数器设置回初始值。这很有意义。谢谢大家!@onesnapthanos为什么不在计数器值上使用预增量运算符?此外,如果您可以共享完整的代码,那么识别issue@Abhilash老实说,我忘了,你是对的!啊,我完全忘记了预递增!非常有用的回答@nexevis。谢谢
ticketNumber = TICKET_PREFIX + counter++;