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