Как написать метод, который переводит логическое значение в «да» или «нет» - PullRequest
5 голосов
/ 07 февраля 2010

Я новичок в Java, и мне нужно написать метод, который переводит логическое значение true или false в строку «да» или «нет». Я вроде как потерян.

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

            }

Ответы [ 8 ]

32 голосов
/ 07 февраля 2010
boolean myBoolean = true;
String result = myBoolean ? "yes" : "no";
24 голосов
/ 07 февраля 2010

Условный оператор - ваш друг:

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

В общем, если вы пишете:

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

обычно лучше использовать:

SomeType x = someCondition ? someExpression : someOtherExpression;

Условный оператор обеспечивает проверку только одного из someExpression или someOtherExpression, поэтому вы можете использовать вызовы методов и т. Д., Будучи уверенными, что они не будут выполнены ненадлежащим образом.

Конечно, бывают случаи, когда это становится слишком сложным - вам нужно самим оценить удобочитаемость каждой формы.

4 голосов
/ 22 января 2015

Существует проект от Apache Group под названием Apache Commons Lang для работы с общими классами Java, такими как Boolean. Его класс BooleanUtils имеет несколько хороших методов для работы:

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

В вашем примере вы должны работать с методом toStringYesNo.

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

Это напечатает

no

Чтобы добавить библиотеку в свой проект, просто добавьте ее в свою Maven pom.xml зависимость:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.6</version>
</dependency>
4 голосов
/ 07 февраля 2010
if(pback == true)
{
    return "yes";
} else {
    return "no";
} 

Несколько замечаний:

  • равенство проверяется с использованием ==, поэтому вы должны написать if ( a == b ), а не if ( a = b );
  • возврат значения из метода выполняется с помощью ключевого слова return, за которым следует значение;
  • else не принимает дополнительный аргумент, если вы не хотите сказать else if, который затем принимает выражение, подобное if, например, else if ( a ==b ).
1 голос
/ 07 февраля 2010
if (pback) {
    return "yes";
}
else {
    return "no";
}

Я чувствую, что что-то упустил.

0 голосов
/ 08 февраля 2010

Во-первых, параметр для вашего метода перевода никогда не используется. Вы должны это исправить.

Во-вторых, нужно ли вам использовать строковые значения "Да" и "Нет" для условных выражений? Если нет, и вы можете просто использовать логическую версию (и я не вижу причин, по которой вы не могли), я предлагаю оставить логическую версию.

Затем вы можете перевести это логическое значение в «Да» или «Нет», когда оно выводится, используя что-то вроде следующего кода:

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

        }

Дело в том, что гораздо проще использовать условные выражения с логическими значениями, чем тестировать две строки на эквивалентность.

0 голосов
/ 07 февраля 2010
String yesNo(boolean b) {
    String[] s = {"yes", "no"};
    return b ? s[0] : s[1];
}

отредактировано с правильным возвратом

0 голосов
/ 07 февраля 2010

Приведенные выше советы должны выполнять эту работу, но я бы порекомендовал вам использовать:

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

потому что позже вы можете легко преобразовать это обратно:

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

но строка перевода будет "true" из "false":)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...