开发者社区> 问答> 正文

初学者Java按顺序递增设置变量并重置计数

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

我的问题是,当我创建一个对象时,它以前缀+计数器开始,但不立即对其进行递增,我希望它是这样,以便它立即将创建的第一个对象递增至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

展开
收起
montos 2020-03-27 10:36:33 749 0
1 条回答
写回答
取消 提交回答
  • 您目前从未将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

    2020-03-27 10:37:36
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载