2016-10-07 1 views
2

Je travaille sur un atelier pour mon JAVA. Il y a une partie que je vais avoir du mal à comprendre: Appliquer les formules suivantes basées sur le genre (doit utiliser une instruction if (s)): Hmale_child = ((Hmother * 13/12) + Hfather)/2 OU Hfemale_child = ((Hfather * 12/13) + Hmother)/2Utilisation de la déclaration If avec des formules JAVA

Comment utiliser une instruction if avec ces formules? J'utilise le Hmale_child si l'utilisateur saisit que le genre de son enfant est masculin. Mais toutes les déclarations if que j'ai vues ont à voir avec les nombres. Est-ce que quelqu'un peut-il me montrer la bonne direction?

Quelque chose comme: si (genre == mâle) ??


import java.util.Scanner; 

public class WKSP6Trial 
{ 
public static void main(String[] args) 
{ 
    Scanner scannerObject = new Scanner(System.in); 

    Scanner inp = new Scanner(System.in); 
    String Letter; 
    String input = ""; 
    String exit = "exit"; 
    boolean isStringLetter = true; 
    System.out.println("Welcome! If at any time you wish to exit the program, type the word exit, and press enter."); 

    while(true) 
    { 
     System.out.println("\nPlease enter letters m or f only as you enter your child's gender: "); 
     input = inp.nextLine(); 

     if(input.equalsIgnoreCase(exit)){break;} 
     isStringLetter = input.matches("[m/f/M/F]+"); 
     if(isStringLetter == false) 
     { 
     System.out.println("\nYou entered a non letter " + input); 
     System.out.println("Remove all non letters aside from m or f from your input and try again !"); 
     break; 
     } 

    System.out.println("You entered the gender of your child."); 

    System.out.println("Next enter the height of the child's father in feet followed by "); 
    System.out.println("the father's height in inches: "); 

    int n1, n2; 
    n1 = scannerObject.nextInt(); 
    n2 = scannerObject.nextInt(); 
    System.out.println("You entered " + n1 + " followed by " + n2); 

    System.out.println("Finally, enter the height of the child's mother followed by "); 
    System.out.println("the mother's height in inches: "); 

    int d1, d2; 
    d1 = scannerObject.nextInt(); 
    d2 = scannerObject.nextInt(); 
    System.out.println("You entered " + d1 + " followed by " + d2); 

    Scanner in = new Scanner(System.in); 

    System.out.print("Convert from: "); 
     String fromUnit = in.nextLine(); 
     System.out.print("Convert to: "); 
     String toUnit = in.nextLine(); 


     //below is what I'm uncertain of 
     if(gender == m) 
     Hmale_child = ((Hmother * 13/12) + Hfather)/2; 
    } 
} 
} 
+0

Pour comparer les chaînes, vous n'utilisez généralement pas '=='. Au lieu de cela, vous voulez probablement écrire 'if (gender.equals (" M "))' ou 'if (gender.equalsIgnoreCase (" M "))' ou quelque chose de similaire. Pour plus d'informations sur pourquoi, regardez les réponses à [cette question] (http://stackoverflow.com/q/513832/) –

+0

Quand je fais ceci, j'obtiens immédiatement l'erreur, "ne trouve pas le symbole". Cela signifie que je dois déclarer et initialiser la variable, non? Donc j'ai défini gender.equals, Hmother, et Hfather comme Strings? –

+0

Oups, désolé, vous l'avez appelé 'input', pas' gender'. Donc, 'if (input.equals (" M "))'. –

Répondre

1

Vous pouvez utiliser les equals ou equalsIgnoreCase méthodes pour vérifier vos entrées de chaîne:

if (gender.equalsIgnoreCase("m")) { 
    child = ((Hmother * 13.0/12) + Hfather)/2.0; 
else { // alternatively - check if the gender is female, just to be sure 
    child = ((Hfather * 12.0/13) + Hmother)/2.0; 
} 

EDIT:
Si vous ne pouvez absolument pas utiliser un bloc else, la même logique peut être exprimé en deux déclarations if, car un sexe ne peut être à la fois "m" et "f":

if (gender.equalsIgnoreCase("m")) { 
    child = ((Hmother * 13.0/12) + Hfather)/2.0; 
} 

if (gender.equalsIgnoreCase("f")) { 
    child = ((Hfather * 12.0/13) + Hmother)/2.0; 
} 
+0

Cela fonctionnerait si je pouvais utiliser une simple instruction if-else, mais je dois utiliser une instruction if à la place. –

+0

@ J.Nav voir mon edit avec pour une solution sans bloc 'else'. – Mureinik

+1

Merci! C'est une bonne idée qui a du sens. –

0

Comme dans Java, String est un objet. Ainsi, la méthode appropriée pour vérifier ou comparer votre chaîne d'entrée consiste à utiliser la méthode equals() au lieu de ==.

Par exemple: String s = "m"; pour vérifier si String s est égal à m, vous pouvez utiliser s.equals("m"). Pour int, double et d'autres types de données primitifs (sauf booléen), vous pouvez utiliser ==.

Comme booléen ne contient que deux valeurs i, e true ou false. Vous pouvez simplement les utiliser directement dans les conditions if.

Par exemple

boolean b = true; 
if (b){ 
// true 
}else{ 
//false 
} 
+0

Eh bien, je ne peux pas utiliser "else". Il a spécifiquement demandé une "déclaration if". Merci pour la réponse rapide, bien que –

+0

@ J.Nav Chaque fois que vous utilisez une instruction 'if' il est toujours préférable d'ajouter un' else' comme si/else définit votre programme d'une manière claire et propre, même si vous pouvez simplement utiliser un si sans autre. – Ravikumar

0

Vous pouvez comparer les chaînes si des déclarations aussi. Gardez à l'esprit que les chaînes sont des objets, donc == ne fonctionnera pas comme vous pouvez vous y attendre. Lors de la comparaison d'objets, == vérifie si les deux références d'objet pointent sur le même objet, donc deux objets différents avec des données identiques ne seront pas considérés comme identiques en utilisant ==. Si vous souhaitez comparer le contenu de l'objet, vous devez utiliser la méthode equals() à la place.

La plupart des objets Java standard doivent prendre en charge une définition raisonnable de l'égalité via leur méthode equals(). Dans le cas de chaînes, le contenu de la chaîne sera comparé de manière sensible à la casse (utilisez equalsIgnoreCase() si vous ne voulez pas que la comparaison soit sensible à la casse.)

Si vous faites vos propres classes, vous aurez besoin de mettre en œuvre une définition raisonnable de equals() vous-même.(La règle == et .equals() est légèrement plus compliquée dans le cas des chaînes dues à la table de chaînes de Java, donc == fonctionnera souvent dans ce cas - mais vous ne devriez toujours pas vous y fier.)

Ainsi, pour exécuter un calcul différent en fonction du sexe est entré, vous feriez quelque chose comme ceci:

float height; 
if (gender.equalsIgnoreCase("m")) { 
    height = (heightMother * 13f/12f) + (heightFather/2f); 
else { 
    height = (heightFather * 12f/13f) + (heightMother/2f); 
} 

Notez les noms de mes variables - convention Java est pour les noms de variables pour commencer être en camelCase - les noms de variables ne doivent pas commencer par une lettre majuscule.

Aussi, j'ai utilisé "f" à la fin de mes nombres pour indiquer qu'ils sont des nombres à virgule flottante - vous perdrez la précision si vous effectuez toutes les mathématiques en utilisant des nombres entiers.