2015-12-18 54 views
2

我已經寫了一個方法,根據每個房間的牀位是單人還是雙人,返回一個酒店的最大佔用率。方法沒有回覆正確總計

public int calcOccupancy() { 
    int total = 0; 
    Room roomref; 
    Bed bedref; 

    for (int x = 0; x < room.size(); x++){ 
     roomref = room.get(x); 

      for (int y = 0; y < roomref.numBeds(); y++){ 
       bedref = roomref.getBed(y); 

       switch(bedref.bedNum()){ 
       case 1: total = total + 2; 
       case 2: total = total + 1; 
       default:break; 
       } 


      } 
    } 
    return total; 
} 

當我調用該方法,我似乎得到相當隨機值,雖然他們從不太遠了,他們應該是什麼。

任何人都可以弄清楚我做錯了什麼。如果需要,我可以從項目中提供更多的代碼。

+4

在交換機中需要斷開語句。查看教程[這裏](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html) – CubeJockey

回答

2

你需要你的語句結束後加break S:

case 1: 
    total = total + 2; 
    break; 
case 2: 
    total = total + 1; 
    break; 

否則total將被分配&重新分配過&了。

+0

神奇,完美。出於好奇,你知道代碼事先做了什麼嗎? –

+0

似乎它正在爲'total'變量賦值和重新賦值。但是什麼是「全部」?不知道,這個方法的邏輯似乎有些問題。 –

2

添加缺少的break;語句到交換機 - 否則你最終total += 3的情況下,1

 switch(bedref.bedNum()) { 
      case 1: 
      total = total + 2; 
      break; //OR OTHERWISE IT WOULD FALL THROUGH 
      case 2: 
      total = total + 1; 
      break; 
      default: 
      break; 
    } 

如果bedNum()指「是在那個房間裏什麼樣的牀」,你可能要考慮一下一個枚舉保持possibilies。更容易在末尾改爲:

public enum Beds { 
    DOUBLE, 
    SINGLE; 
} 

隨着開關

switch(bedref.bedNum()) { 
      case SINGLE: 
      total += 1; 
      break; 
      case DOUBLE: 
      total += 2; 
      break; 
      default: 
      break; 
} 

或者你甚至可以讓枚舉知道牀位數:減少你的計數

public enum Beds { 
    TWO_SINGLE(2), 
    DOUBLE(2), 
    SINGLE(1); 
    int beds; 
    private Beds(int i) { 
     beds = i; 
    } 
    public int getNumberOfBeds() { 
     return beds; 
    } 
} 

總計到

total += bedref.bedNum().getNumberOfBeds(); 
0

如果y OU不要把break語句每個case,你將下降到明年的情況和他們的代碼會被執行:

如果case 1匹配,對於情況1 碼2的情況下將被執行,而你將得到total + 3

糾正這樣的:

switch(bedref.bedNum()){ 
       case 1: total = total + 2;break; 
       case 2: total = total + 1;break; 
       default:break; 
       } 
0

你需要把一個破發的情況下1後爲好。休息一切似乎很好。

您的代碼會發生什麼情況,執行後轉到「case 1」後,它不會從開關塊中出來並執行「case 2」。