2012-04-13 142 views
1

我在一段時間內沒有使用過java,並且對此有些沮喪......它總是返回-99,但我不知道邏輯錯在哪裏。爲什麼這會一直返回-99?

public static void main(String[] args){ 
    System.out.println(shippingCost('P',10)); 
} 

public static int shippingCost(char packageType, int weight) 
{ 
    String e1 = "Legal Values: Package Type must be P or R"; 
    String e2 = "Legal Values: Weight < 0"; 
    int cost = 0; 
     if((packageType != 'P')||(packageType != 'R')) 
     { 
      //throw new Exception(e1); 
      return -99; 
     } else { 
      return -1; 
     } 
+1

我猜想,packageType始終爲也「P」或不「R」,並且或者那些滿足的''||在'if'。 – 2012-04-13 20:17:15

+0

'packageType =='P''因此'if(false || true)'因此'if(true)'。 || (或)應該是&&(和)。 – 2012-04-13 20:17:20

+0

我的IDE(IntelliJ)顯示「*條件...總是'真'*」在這裏... – 2012-04-13 20:18:22

回答

11

你的if()應該使用AND。由於它現在是OR,所以packageType既不是P也不是R.

+0

謝謝你的回答 – Meowbits 2012-04-13 20:20:34

+4

@Meowbits:不要感謝,[接受它](http://meta.stackexchange.com/questions/5234):-)。 – 2012-04-13 20:23:00

2

您的if語句正在檢查packageType是否等於'P'或者它不等於'R'。這將始終解析爲真,這意味着您的函數將始終返回-99。

3

你是否錯了。 ((不是P)或(不是R))將永遠是真實的,因爲其中一個總是會是真的。

+0

這是不正確的,因爲P和R *不*隱含地依賴,並且沒有明確的依賴性,但是當擴展時,'(X!= P)或(X!= R)'(由DeMorgan) - >'! (X == P AND X == R)'和'X'不能是'P',如果它是'R'或反之亦然(除非'P == R',當然)。 – 2012-04-13 20:28:20

+0

我對你爲什麼說我錯了,當我們發佈相同的東西時感到有點困惑。既然是字符,'P'和'R'永遠不會相等。 – Matsemann 2012-04-13 22:39:19

+0

我的意思是P和R *不是隱式依賴*。我通過相對於'X'定義'P'和'R'(用僞代碼來反映初始文章)來明確依賴關係。如果沒有這樣的依賴關係*,那麼'P' *或*'R'可能會在不影響另一個的情況下爲false(或true):爲上面的情況畫出真值表。 – 2012-04-14 00:00:09

2

我想你的意思是使用AND而不是OR。嘗試

if((packageType != 'P') && (packageType != 'R')) 
         ^^ 
1

我認爲你的問題是在if語句。既然你的條件是「不是P或不是R」,那麼如果你將P傳遞給它將要評估爲真的方法。這是因爲它不是P,但它也不是R,因此它的計算結果爲真。

桑尼