初心者には、順次、設定された変数をインクリメントし、カウントをリセットするJava

onesnapthanos:

私は私が順次インクリメントしています私のクラスのメソッドを持ついくつかのマイナーな問題を抱えています。基本的に私のクラスのコンパイルは、テストクラスがあり、私はテスト結果を得るためにテスターを実行したとき、私は私が探しています所望の出力を得ることはありません、それは私が以下提供されるエラーメッセージが続いています。

私の質問は、私はそれがプレフィックス+カウンターから始まりますが、すぐにそれをインクリメントしないオブジェクトを作成するとき、私はそれはそれはすぐになどなど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)
Nexevis:

あなたは、現在設定されたことがない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 )、あなたが実際にそれがあることを期待しなければならないときVAN1000

これは、上のポストインクリメントを使用しているcount代わりに以下の行に、プリインクリメントの:

ticketNumber = TICKET_PREFIX + counter++;

あなたはで開始する最初のチケットたい場合は1001代わりに、変更count++への++count1でカウントをインクリメントします、前に割り当てるticketNumber値を。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=279589&siteId=1