2017-02-06 8 views
0

전투 시뮬레이터를 작성 중입니다. 공격자 클래스가 공격을 시작하고 방어자 클래스가 공격을 차단합니다. 관리자는 결과를 계산하고 인쇄하는 주 수업입니다. 내 문제는 내 highRatio, mediumRatio 및 lowRatio 변수입니다. 값이 1과 같지 않으면 모든 값이 0으로 설정됩니다. 어떤 아이디어가 될지도 모릅니다.논리 오류? 다이빙 2 int float 결과

// 클래스 앞뒤로

public int defenseSelector(int highAtkCounter, int mediumAtkCounter, int lowAtkCounter, int rounds, int roundCounter) 
{ 
    Random defenseTypeGenerator; 
    int defense = 0; 
    float highRatio; 
    float mediumRatio; 
    float lowRatio; 

    defenseTypeGenerator = new Random(); 
    int defenseType = defenseTypeGenerator.nextInt(MAX_ROUNDS) + 1; 

    highRatio = highAtkCounter/roundCounter; 
    mediumRatio = mediumAtkCounter/roundCounter; 
    lowRatio = lowAtkCounter/roundCounter; 



    if(roundCounter > 3 && roundCounter <= rounds) //AI portion 
    { 
     if (highRatio > mediumRatio && highRatio > lowRatio) 
     { 
      defense = HIGH; 
     } 

     else if (mediumRatio > highRatio && mediumRatio > lowRatio) 
     { 
      defense = MEDIUM; 
     } 

     else if (lowRatio > highRatio && lowRatio > mediumRatio) 
     { 
      defense = LOW; 
     } 

     else 
     { 
      System.out.println("AI ERROR ratios " + highRatio + " " + mediumRatio + " " + lowRatio); 
      System.out.println("AI ERROR atkCounters " + highAtkCounter + " " + mediumAtkCounter + " " + lowAtkCounter); 
      System.out.println("AI ERROR rCounters " + roundCounter); 

// 관리자 클래스의 정수에서 정수 결과 자바

while(roundCounter <= rounds) 
    { 
     int attack = theAttacker.attackSelector(high, medium, low); 

     int highAtkTracker = theAttacker.countHighAtks(attack); 
     System.out.println("DEBUG " + attack); 
     System.out.println("DEBUG " + highAtkTracker); 
     int mediumAtkTracker = theAttacker.countMediumAtks(attack); 
     System.out.println("DEBUG " + attack); 
     System.out.println("DEBUG " + mediumAtkTracker); 
     int lowAtkTracker = theAttacker.countLowAtks(attack); 
     System.out.println("DEBUG " + attack); 
     System.out.println("DEBUG " + lowAtkTracker); 

     highAtkCounter = highAtkCounter + highAtkTracker; 
     mediumAtkCounter = mediumAtkCounter + mediumAtkTracker; 
     lowAtkCounter = lowAtkCounter + lowAtkTracker; 


     int defense = theDefender.defenseSelector(highAtkCounter, mediumAtkCounter, lowAtkCounter, rounds, roundCounter); 

답변

0

어떤 연산.

따라서 명시 적으로 부동 소수점 형식으로 정수를 캐스팅해야합니다

highAtkCounter = highAtkCounter + (float)highAtkTracker; 
    mediumAtkCounter = mediumAtkCounter + (float)mediumAtkTracker; 
    lowAtkCounter = lowAtkCounter + (float)lowAtkTracker; 
+0

감사합니다! 당신이 제안한 라인을 편집하는 대신에 나는 수비수 클래스의 것들을 편집했다 : highRatio = (float) highAtkCounter/roundCounter; mediumRatio = (float) mediumAtkCounter/roundCounter; lowRatio = (float) lowAtkCounter/roundCounter; –

+0

@KhalidJomha * "당신이 제안한 라인을 편집하는 대신에, 방어자 클래스에있는 코드를 편집 할 것을 권장합니다."* 귀하의 코드, 당신의 선택 ...; o)하지만 floting point 작업에는 디지털화 오류가있을 수 있습니다. 보통 이것은 게임에서 그다지 중요하지 않습니다 ... –

+0

디지털화 오류가 무엇입니까? –