Une partie de mon programme teste si deux nombres sont égaux. Parce que certaines opérations ne prennent que des doubles et que d'autres ne prennent que des ints, je compare les ints et les doubles. Les programmes retournent que les deux sont égaux même lorsqu'ils ne sont que ronds pour être égaux (c'est-à-dire 7.5=7
). Je veux seulement que le programme retourne vrai si les deux sont égaux. J'ai essayé les solutions énumérées ici: How to test if a double is an integer pour déterminer si mes doubles sont ints.
Tous semblent fonctionner - ils compilent, mais le programme revient toujours 7=7.5
J'ai aussi essayé d'aller dans l'autre direction - convertir mes ints en doubles - même résultat. Comment puis-je obtenir mon programme pour reconnaître la différence? Avec la suggestion la plus actuelle:java testing si double est un 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);
}
}
}
}
}
}
J'ai branché 85s comme mes numéros de test.
Le seul résultat devrait être (0,0,0)+(0,0,0)+(255,255,255)
, mais il donne aussi (43,57,41)+(213,39,86)+(0,160,130) . (41+86+130)/3=85.7!=85
.
Veuillez poster un [mcve]. –
Aussi, essayez de regarder cette question pour votre problème avec les doubles et les ints: http://stackoverflow.com/q/9898512/5335355 – CShark