java - 初学者java顺序递增设置变量并重置计数

标签 java oop methods

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

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

相关文章:

c++ - C++虚函数原理

c++ - 从常量函数返回引用

.net - 与旧 CInt() VB 方法相对应的 VB.NET 方法是什么?

java - 用Java访问Android数据目录

java - 想用Struts2开发JasperReport

java - 为什么java内部函数还有代码?

Java字符串长度方法

java - 转发 servlet POST 请求时出现 HTTP 错误 405

c# - 如何/何时在 OOP 中编写可重用的方法

java - 依赖项更改时强制类重新编译