我的类方法有一些小问题,我要按顺序递增。基本上,我的类可以编译,有一个测试类,当我运行测试仪来获取测试结果时,我没有得到想要的输出,随后是错误消息,我将在下面提供。
我的问题是,当我创建一个对象时,它以前缀+计数器开始,但不立即对其进行递增,我希望它是这样,以便它立即将创建的第一个对象递增至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)
问题来源:Stack Overflow
您目前从未将counterback 设置为中的初始值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,这将在分配ticketNumber值之前将count加1 。
回答来源:Stack Overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。