2016-08-20 7 views
-1

일부인 경우. 어떤 연산은 double을 취하고 다른 연산은 int만을 취하기 때문에 int와 double을 비교합니다. 프로그램은 두 개의 동일하다고 복귀 되더라도 그들이 단지 라운드 같다면 (즉 7.5=7)이다. 두 사람이 실제로 인 경우에만 프로그램이 true를 반환하도록하고 싶습니다. 나는 여기에 나열된 솔루션을 시도했다 : How to test if a double is an integer 내 double 형 int인지 확인하십시오. 그들은 컴파일하지만,이 프로그램은 아직도 내가 해봤 7=7.5 는 다른 방향으로가는 반환 - - 그들 모두가 표시
작동하는 복식 내의 int로 변환 - 같은 결과를. 내 프로그램에서 그 차이를 인정하도록하려면 어떻게합니까? 가장 최근의 제안 :자바 테스트 두 숫자가 동일한 경우 두 번 내 프로그램 테스트를 int

import acm.program.ConsoleProgram; 
import java.awt.Color; 
import acm.io.IODialog; 
import java.text.*; 
import static java.lang.Math.*; 
import java.util.*; 

/** Tests to see if user color matches sample colors */ 
public class ColorMatch extends ConsoleProgram 
{ 
//defining sample colors 
Color[] dmc = 
{ 
    new Color(255,255,255), 
    new Color(43,57,41), 
    new Color(213,39,86), 
    new Color(0,160,130), 
    new Color(0,0,0), 
}; 

public void run() 
{ 
    average(); 

} 

//averages three colors, then tests for match to given color 
public void average() 
{ 
    //asks for stitch color 
    IODialog dialog  = new IODialog(); 
    int stitchRed  = dialog.readInt("Enter red value: "); 
    int stitchGreen  = dialog.readInt("Enter green value: "); 
    int stitchBlue  = dialog.readInt("Enter blue value: "); 
    Color stitchColor = new Color(stitchRed,stitchGreen,stitchBlue); 

    //gets averages for dmc colors 
    for (Color i:dmc) 
    { 
     for (Color j:dmc) 
     { 
      for (Color k:dmc) 
      { 
       int indexI = Arrays.asList(dmc).indexOf(i); 
       int indexJ = Arrays.asList(dmc).indexOf(j); 
       int indexK = Arrays.asList(dmc).indexOf(k); 
       if (indexI <= indexJ && indexJ <= indexK) 
       { 
        int iRed = i.getRed(); 
        int jRed = j.getRed(); 
        int kRed = k.getRed(); 
        int iGreen = i.getGreen(); 
        int jGreen = j.getGreen(); 
        int kGreen = k.getGreen(); 
        int iBlue = i.getBlue(); 
        int jBlue = j.getBlue(); 
        int kBlue = k.getBlue(); 
        double redAverage = (iRed+jRed+kRed)/3; 
        double greenAverage = (iGreen+jGreen+kGreen)/3; 
        double blueAverage = (iBlue+jBlue+kBlue)/3; 
        if (redAverage == (int)redAverage && greenAverage == (int)greenAverage && blueAverage == (int)blueAverage) 
        { 
         int rAverage = (int)redAverage; 
         int gAverage = (int)greenAverage; 
         int bAverage = (int)blueAverage; 
         Color colorAverage = new Color(rAverage,gAverage,bAverage); 

         //tests to see if any average equals the stitch color 
         if (colorAverage.equals(stitchColor)) 
         { 
          println("The color match is: " + i + ", " + j + ", " + k); 
         } 
        } 
       } 
      } 
     } 
    } 

나는 내 테스트 번호로 85s를 연결했습니다.
유일한 결과 (0,0,0)+(0,0,0)+(255,255,255)해야하지만, 또한 (43,57,41)+(213,39,86)+(0,160,130) . (41+86+130)/3=85.7!=85을 수득한다.

+1

[mcve]를 게시하십시오. –

+0

는 또한 복식과의 int와 문제에 대한이 질문을보고 시도 : http://stackoverflow.com/q/9898512/5335355 – CShark

답변

0

나는 문제가 당신이 'INT'과 소수 부분을 절단하는 int로 이중 값을 캐스팅 한 후 '더블'값의 비교를하는 것입니다 생각합니다. 예 : (7==7.5)거짓입니다. 그러나 (7==(int)7.5)은 입니다. (int)7.5 = 7입니다. int와 double을 엄격하게 비교하려면 캐스팅하지 않고 곧바로 비교할 수 있습니다. double을 int로 캐스팅하는 방법에 대한 자세한 내용은 How does double to int cast work in Java을 참조하십시오.

+0

나는 두 값을 비교 해요 : redAverage를 redAverage의 절단 된 정수가 동일한 경우, redAverage는 정수 여야합니다. 나는 redAverage floor 함수를 사용하여 비교했다. 나는 또한 redAverage의 마루와 천장을 보았습니다. 여기에 나열된 솔루션을 사용했습니다. http://stackoverflow.com/questions/9898512/how-to-test-if-a-double-is-an-integer –