2013-01-10 49 views
1

为什么构造函数中的assert语句在下面的代码中不起作用? (我想用它代替if语句,这点我注释掉)为什么“assert”不按我想要的方式工作?

import java.util.HashMap; 
import java.util.Map; 


enum Suite{ 
    HEARTS, DIAMONDS, SPADES,CLUBS; 
} 

public class Card { 
    private Suite suite; 
    private int number; 
    private String name; 

    public Card(int number, Suite suite) { 
//  if(number < 0 || number > 13) 
//   throw new IllegalArgumentException(); 
     assert(!(number < 0 || number >13)); 

     this.number=number; 
     this.suite=suite; 
     initialize(); 

    } 
    private void initialize(){ 
     switch(number){ 
     case 1: name="Ace"; break; 
     case 2: name="Two"; break; 
     case 3: name="Three"; break; 
     case 4: name="Four"; break; 
     case 5: name="Five"; break; 
     case 6: name="Six"; break; 
     case 7: name ="Seven"; break; 
     case 8: name ="Eight"; break; 
     case 9: name="Nine"; break; 
     case 10: name="Ten"; break; 
     case 11: name="Jack"; break; 
     case 12: name="Queen"; break; 
     case 13: name="King"; break; 
     default: break; 
     } 
    } 
    public int getNumber() { 
     return number; 
    } 

    public int getBJNumber(){ 
     if(number == 11 || number == 12 || number == 13) 
      return 10; 
     else 
      return number; 
    } 

    public Suite getSuite() { 
     return suite; 
    } 

    public String toString(){ 
     return name + " of " + suite.toString(); 
    } 

    public static void main(String[] args) { 
     Card testCard = new Card(1, Suite.CLUBS); 
     System.out.println(testCard); 
     Card testCard2 = new Card(5, Suite.CLUBS); 
     System.out.println(testCard2); 
     Card testCard3 = new Card(1, Suite.CLUBS); 
     System.out.println(testCard3); 
     Card testCard4 = new Card(15, Suite.CLUBS); 
     System.out.println(testCard4); 
    } 
} 

输出:

Ace of CLUBS 
Five of CLUBS 
Ace of CLUBS 
null of CLUBS <---this should have not been shown. 

也许我断言的理解是不正确的?

+2

我会有点担心使用'assert'这样的,如果你特别希望谨防在任意环境中虚假构造函数调用。也就是说,我赞成在标准卡组中添加一张“空卡”。 –

+1

在这种情况下,这不是你的实际问题,所以张贴评论而不是答案,但是 - 你的断言是错误的。它将允许'number'为'0',但'number'的最小有效值为'1'。 – ruakh

回答

10

默认情况下,assert已禁用。您需要明确启用使用-ea标志。以下是关于如何启用/禁用断言的java tutorial

2

默认情况下,断言处于关闭状态。你必须告诉vm来评估它们。

使他们: -ea

相关问题