2010-02-07 4 views
5

Je suis nouveau à java et je "ai besoin d'écrire une méthode qui traduit un booléen vrai ou faux en une chaîne" oui "ou" non ». Je suis un peu perducomment écrire une méthode qui traduit un booléen en "oui" ou "non"

public class Book 
{ 
    private String title; 
    private String author; 
    private String isbn; 
    private int pages; 
    private boolean pback; 
    private double price; 

    /** 
    * Constructor for objects of class Book 
    */ 
    public Book(String bookTitle, String bookAuthor, String bookCode, int bookPages, boolean paperback, double bookRetail) 
    { 
     // initialise instance variables 
     title = bookTitle; 
     author = bookAuthor; 
     isbn = bookCode; 
     pages = bookPages; 
     pback = paperback; 
     price = bookRetail; 
    } 


public String translate(boolean trueorFalse) 
      { 
       if(pback = true) 
        { 
         ??????; 
        }    
       else(pback = false) 
        { 
         ???????; 
        } 

      } 
+1

Le code dans votre fonction translate() est incorrect. Vous utilisez un opérateur d'affectation dans la clause if et else à la place de l'opérateur d'égalité. Vous n'avez également pas d'accolade de fermeture pour la définition de classe. Petites choses, et je suis sûr que personne ne va essayer de faire fonctionner ce code, mais c'est sympa d'avoir des choses correctes :) –

+12

Les développeurs qui écrivent b == vrai ou b == faux devraient être envoyés au camp d'entraînement booléen pour la rééducation. – starblue

+1

Est-ce que ce sont les devoirs? – MAK

Répondre

3
if(pback == true) 
{ 
    return "yes"; 
} else { 
    return "no"; 
} 

Un couple de choses à noter.

  • l'égalité est testée à l'aide ==, de sorte que vous devriez écrire if (a == b), non if (a = b);
  • renvoyer une valeur à partir d'une méthode est effectuée en utilisant le mot-clé return suivi de la valeur;
  • sinon ne prend pas un argument supplémentaire, sauf si vous voulez dire else if qui prend alors une expression similaire à if, par exemple. else if (a ==b).
+8

Le test sur true/false est un peu redondant par rapport à 'if (pback)' ou (pour l'inverse) 'if (! Pback)'. Je compare très rarement contre vrai/faux. De même, j'utiliserais toujours l'opérateur conditionnel pour cette situation. –

+1

@Jon: Je suis d'accord. Mon but était de donner la solution la plus simple possible, car le demandeur a indiqué qu'il commençait juste avec Java. –

+1

Je dirais que l'opérateur conditionnel * est * la solution la plus simple possible - mais même si je présentais la version if/else, j'aurais au moins mentionné que vous n'aviez pas besoin du "==" du tout. –

31
boolean myBoolean = true; 
String result = myBoolean ? "yes" : "no"; 
+2

Cet exemple particulier ne renvoie-t-il pas toujours "oui"? :) Ou je ne reçois pas la blague? –

+1

C'est un exemple. myBoolean est supposé être une valeur booléenne indéterminée, non explicitement définie comme vraie dans tous les cas. – Xorlev

1
if (pback) { 
    return "yes"; 
} 
else { 
    return "no"; 
} 

Je me sens comme si je manque quelque chose.

+5

Techniquement parlant, il vous manque un '}' :-) –

+0

Corrigé. Je vous remercie. – MatrixFrog

24

Le conditional operator est votre ami:

public static String translate(boolean trueOrFalse) { 
    return trueOrFalse ? "yes" : "no"; 
} 

En général, si vous vous retrouvez à écrire:

SomeType x; 
if (someCondition) { 
    x = someExpression; 
} else { 
    x = someOtherExpression; 
} 

il est généralement plus agréable à utiliser:

SomeType x = someCondition ? someExpression : someOtherExpression; 

Les marques de l'opérateur conditionnel Assurez-vous que seulement l'un des someExpression ou someOtherExpression est évalué, de sorte que vous pouvez utiliser des appels de méthode, etc., convaincus qu'ils ne seront pas exécutés de manière inappropriée.

Bien sûr, il y a des moments où cela devient trop compliqué - vous devez juger de la lisibilité de chaque formulaire pour vous-même.

+1

"L'opérateur conditionnel s'assure que seul l'un de someExpression ou someOtherExpression est évalué, ainsi vous pouvez utiliser des appels de méthode, en sachant qu'ils ne seront pas exécutés de manière inappropriée." il en est de même de l'utilisation de la construction if-else –

+0

@matt b - exactement, ce qui explique pourquoi ils sont interchangeables. Le fait est que ce n'est * pas * le même que IIF dans VB, par exemple - une préoccupation commune est que * les deux * et les deux expressions peuvent être évaluées, ce qui n'est pas réellement un problème. –

-1

Les conseils ci-dessus devraient faire le travail, mais je vous recommande d'utiliser:

public String translate(boolean trueOrFalse) 
{ 
    return String.valueOf(trueOrFalse); 
} 

parce que plus tard, vous pouvez facilement convertir ce retour:

public boolean translateBack(String translation) 
{ 
    return Boolean.parseBoolean(translation); 
} 

mais la chaîne de traduction sera " vrai » de "faux" :)

-5
String yesNo(boolean b) { 
    String[] s = {"yes", "no"}; 
    return b ? s[0] : s[1]; 
} 

avec retour correct ÉDITÉ

+0

Le -1 ne vient pas de moi, mais c'est probablement parce que vous créez inutilement un 'String []' dans votre méthode. Vous le rendez plus difficile à comprendre. Tout simplement faire «retour b? "oui": "non"; –

+1

er, vous renvoyez un 'String' à une fonction qui a un type de retour de' boolean', sans parler de la chaîne de caractères array * overkill *. –

0

Tout d'abord, le paramètre de votre méthode translate n'est jamais utilisé. Vous devriez corriger cela. Deuxièmement, avez-vous besoin d'utiliser les valeurs de chaîne "Oui" et "Non" pour les conditionnelles? Si ce n'est pas le cas et que vous pouvez simplement utiliser la version booléenne (et je ne vois aucune raison pour laquelle vous ne pourriez pas), je suggère de quitter le booléen.

Vous pouvez ensuite traduire booléen en « Oui » ou « Non » quand il est sorti en utilisant quelque chose comme le code suivant:

 //say your boolean variable is called gotIt 
      if(gotIt == true) //you can also just say if(gotIt) here 
       { 
        //here you place the string where it needs to be, either output it or place it into a variable 
        System.out.println("Yes"); 
       }    
      else 
       { 
        //same as above but for false 
        System.out.println("No"); 
       } 

     } 

Le fait est qu'il est beaucoup plus facile à utiliser conditionals avec des valeurs booléennes opposé à tester 2 chaînes pour l'équivalence.

4

Il existe un projet du groupe Apache appelé Apache Commons Lang pour travailler avec des classes Java communes telles que Boolean. Sa classe BooleanUtils a des méthodes agréable de travailler avec:

toStringOnOff(boolean bool) - converts a boolean to a String returning 'on' or 'off' 
toStringOnOff(Boolean bool) - converts a Boolean to a String returning 'on', 'off' or null 
toStringTrueFalse(boolean bool) - converts a boolean to a String returning 'true' or 'false' 
toStringTrueFalse(Boolean bool) - converts a Boolean to a String returning 'true', 'false' or null 
toStringYesNo(boolean bool) - converts a boolean to a String returning 'yes' or 'no' 
toStringYesNo(Boolean bool) - converts a Boolean to a String returning 'yes', 'no' or null 

Dans votre exemple, vous devez travailler avec la méthode toStringYesNo.

boolean myBoolean = false; 
String result = BooleanUtils.toStringYesNo(myBoolean); 
System.out.println(result); 

Ce imprimera

no 

Pour ajouter la bibliothèque à votre projet tout simplement l'ajouter à votre Mavenpom.xml dépendance:

<dependency> 
    <groupId>org.apache.commons</groupId> 
    <artifactId>commons-lang3</artifactId> 
    <version>3.6</version> 
</dependency> 
+1

Pouvez-vous ajouter du contexte à votre code? – Chrismas007

Questions connexes