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);
감사합니다! 당신이 제안한 라인을 편집하는 대신에 나는 수비수 클래스의 것들을 편집했다 : highRatio = (float) highAtkCounter/roundCounter; mediumRatio = (float) mediumAtkCounter/roundCounter; lowRatio = (float) lowAtkCounter/roundCounter; –
@KhalidJomha * "당신이 제안한 라인을 편집하는 대신에, 방어자 클래스에있는 코드를 편집 할 것을 권장합니다."* 귀하의 코드, 당신의 선택 ...; o)하지만 floting point 작업에는 디지털화 오류가있을 수 있습니다. 보통 이것은 게임에서 그다지 중요하지 않습니다 ... –
디지털화 오류가 무엇입니까? –