тестирование Java, если double является int

java int double equals-operator

83 просмотра

1 ответ

Часть моей программы проверяет, равны ли два числа. Поскольку некоторые операции занимают только двойные, а другие - только целые, я сравниваю целые и двойные. Программы возвращают, что эти два равны, даже когда они только округляются, чтобы быть равными (то есть 7.5=7). Я только хочу, чтобы программа возвращает истину , если два фактически являются равными. Я попробовал решения, перечисленные здесь: Как проверить, является ли double целым числом, чтобы определить, являются ли мои double целыми числами.
Кажется, что все они работают - они компилируются, но программа все еще возвращает, 7=7.5 я пытался пойти в другом направлении - преобразование моих целых чисел в удвоения - тот же результат. Как мне заставить мою программу признать разницу? С самым последним предложением:

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);
                        }
                    }
                }
            }
        }
    }

Я подключил 85-е как мои тестовые номера.
Единственный результат должен быть (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.

Автор: Molly Kitti Источник Размещён: 08.11.2019 11:09

Ответы (1)


0 плюса

Я думаю, что проблема в том, что вы сравниваете значения int и double после приведения двойного значения к int, которое усекает десятичную часть. Например (7==7.5), ложь , но (7==(int)7.5)это правда, потому что (int)7.5 = 7. Так что, если вы хотите строгое сравнение между int и double, вы можете сравнить их прямо, без приведения. Если вы хотите узнать больше о том, как работает приведение типа double к int, обратитесь к разделу Как работает преобразование типа double в int в Java .

Автор: Addis Размещён: 20.08.2016 01:23
Вопросы из категории :
32x32