2010-02-07 4 views
5

Jestem nowym użytkownikiem języka Java i muszę napisać metodę, która tłumaczy wartość logiczną prawda lub fałsz na ciąg znaków "tak" lub " nie”. Jestem trochę zagubionyjak napisać metodę, która tłumaczy wartość logiczną na "tak" lub "nie"

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

Kod w funkcji swojej translate() jest nieprawidłowy. Korzystasz z operatora przypisania w instrukcji if i klauzuli else zamiast operatora równości. Nie masz również klamry zamykającej dla definicji klasy. Małe rzeczy i jestem pewien, że nikt nie spróbuje uruchomić tego kodu, ale miło jest mieć poprawne wyniki :) –

+12

Twórcy, którzy napiszą b == true lub b == false, powinni zostać wysłani na Boolean boot camp dla reedukacji. – starblue

+1

Czy to zadanie domowe? – MAK

Odpowiedz

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

kilka rzeczy do uwaga:.

  • równość jest testowany przy użyciu ==, więc trzeba napisać if (a == b), nie if (a = b);
  • zwracanie wartości z metody odbywa się za pomocą słowa kluczowego return, po którym następuje wartość;
  • Inna nie przyjmuje dodatkowego argumentu, chyba że chcesz powiedzieć else if, który następnie przyjmuje wyrażenie podobne do if, np. else if (a ==b).
+8

Testowanie przeciwko true/false jest trochę zbędne w porównaniu z 'if (pback)' lub (w odwrotnej kolejności) 'if (! Pback)'. Bardzo rzadko porównuję true/false. Podobnie zawsze używałbym operatora warunkowego dla tej sytuacji. –

+1

@Jon: Zgadzam się. Moim celem było dać najprostsze możliwe rozwiązanie, ponieważ pytający wskazał, że właśnie zaczyna od Javy. –

+1

Powiedziałbym, że operator warunkowy * jest * najprostszym możliwym rozwiązaniem - ale nawet gdybym przedstawiał wersję if/else, wspomniałbym przynajmniej, że wcale nie potrzebujesz "==". –

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

Czy ten konkretny przykład nie zawsze zwraca "tak"? :) Czy ja nie dostaję żartu? –

+1

To jest przykład. Przyjmuje się, że myBoolean stanowi część nieokreślonej wartości boolowskiej, a nie jest jawnie zdefiniowana jako prawdziwa we wszystkich przypadkach. – Xorlev

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

czuję jakbym czegoś brakuje.

+5

Z technicznego punktu widzenia brakuje Ci "}" :-) –

+0

Naprawiono. Dziękuję Ci. – MatrixFrog

24

conditional operator jest twoim przyjacielem:

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

W ogóle, jeśli znajdziesz się pisząc:

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

to ogólnie ładniejsza w użyciu:

SomeType x = someCondition ? someExpression : someOtherExpression; 

warunkowego marki operatora pewien, że tylko jeden z someExpression lub someOtherExpression jest oceniane, więc możesz używać wywołań metod itp., Przekonanych, że nie zostaną one wykonane niewłaściwie.

Oczywiście zdarzają się sytuacje, kiedy to staje się zbyt skomplikowane - musisz ocenić czytelność każdego formularza dla siebie.

+1

"Operator warunkowy upewnia się, że oceniana jest tylko jedna z funkcji SomeExpression lub someOtherExpression, dzięki czemu można korzystać z wywołań metod itp., Mając pewność, że nie zostaną one wykonane niewłaściwie." to samo odnosi się do użycia konstruktu if-else przy użyciu atrybutu –

+0

@matt b - dokładnie, dlatego są one zamienne. Chodzi o to, że na przykład * nie * jest taki sam jak w przypadku VF w VB - jedną wspólną obawą jest to, że * oba * drugiego i trzeciego wyrażenia mogą zostać ocenione, co w rzeczywistości nie jest problemem. –

-1

Powyższe porady powinny wykonać zadanie, ale polecam Ci użyć:

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

bo później można łatwo przekonwertować powrotem:

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

ale ciąg tłumaczenie zostanie " true "of" false ":)

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

EDYTOWANA z poprawnym zwrotem

+0

Wartość -1 nie jest ode mnie, ale to najprawdopodobniej dlatego, że niepotrzebnie tworzysz 'String []' w swojej metodzie. Utrudniacie zrozumienie. Po prostu wykonaj 'return b? "tak": "nie"; ". –

+1

er, zwracasz 'String' do funkcji, która ma zwracany typ' boolean', nie wspominając, że tablica napisów jest * overkill *. –

0

Po pierwsze, parametr Twojej metody translate nigdy nie jest używany. Powinieneś to naprawić.

Po drugie, czy należy używać wartości ciągów "Tak" i "Nie" dla warunków warunkowych? Jeśli nie i możesz po prostu użyć wersji boolowskiej (i nie widzę powodu, dla którego nie możesz), proponuję pozostawić wartość boolean.

Następnie można tłumaczyć, że wartość logiczną na „Tak” lub „Nie”, gdy jest on przesyłany przy użyciu coś podobnego do następującego kodu:

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

     } 

Faktem jest, że jest znacznie łatwiejszy w obsłudze warunkowe o wartościach logicznych jak przeciwieństwie do testowania 2 łańcuchów w celu uzyskania równoważności.

4

Istnieje projekt z grupy Apache o nazwie Apache Commons Lang do pracy ze zwykłymi klasami Java, takimi jak Boolean. Jego BooleanUtils klasa posiada kilka metod do pracy z:

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 

W przykładzie należy pracować metodą toStringYesNo.

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

To będzie drukować

no 

Aby dodać bibliotekę do projektu wystarczy dodać go do listy Mavenpom.xml zależność:

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

Czy możesz dodać jakiś kontekst do kodu? – Chrismas007

Powiązane problemy