我的类方法有一些小问题,我将按顺序递增。基本上我的类可以编译,有一个测试类,当我运行测试器以获得测试结果时,我没有得到我想要的输出,然后是我将在下面提供的错误消息。
我的问题是,当我创建一个对象时,它以前缀 + 计数器开始,但不会立即增加它,我希望它能够立即将创建的第一个对象增加到 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)
最佳答案
您目前从未设置 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 )
的门票值(value)当您实际上应该期望它是 VAN1000
.这是由于在
count
上使用了后增量。而不是下面一行的预增量:ticketNumber = TICKET_PREFIX + counter++;
如果您希望第一张票从
1001
开始相反,更改 count++
至++count
,这将在分配 ticketNumber
之前将 count 增加 1值(value)。
关于java - 初学者java顺序递增设置变量并重置计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60671074/