Как распечатать два объекта с помощью String.format()

Я немного запутался. Ранее я разместил вопрос: Традиционное программирование: как вернуть два типа примитивов («int» и «string») из метода get?

Ответ, который он получил, заключался в том, чтобы использовать use String.format() with format specifiers (%s, %d, %f...).

И хотя ответ был немного запутанным, я понимаю, что %f означает преобразовать (?)

Но как распечатать age и name с помощью этого метода. Моя попытка:

// DISPLAY Person name and age

public String displayProfile() {
    return String.format(%fgetAge(), %fgetName())

        }

Основной метод, из которого выполняется метод выше:

 if (optionSelected == 2) {
           System.out.println(zac.displayProfile());
       }

Я повсюду с этим, любая помощь будет оценена.

ОБНОВЛЕНИЕ. В соответствии с просьбой я публикую методы get и set, используемые с методом String.format(). Потому что, хотя я не получаю никаких ошибок после исправления метода String.format, он не печатает «имя» и «возраст» после того, как я возвращаю getAge() и GetName() из String.format(). В чем моя ошибка?

 // SET NAME 
public  void setName(String name) {
    this.name = name;
    }

// GET NAME 
public String getName() {
    return this.name;
}   


// SET AGE

public void setAge(int age) {
    this.age = age;
    }

// GET AGE

public int getAge() {
    return this.age;
}

person user3289740    schedule 25.02.2014    source источник
comment
Привет ребят! Итак, я внес изменения и не получил никаких ошибок. Однако я не вывожу имя или даже возраст при выполнении основного метода: if (optionSelected == 2) { System.out.println(zac.displayProfile()); }   -  person user3289740    schedule 25.02.2014


Ответы (3)


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

public String displayProfile() {
    return String.format("%d, %s", getAge(), getName());
    }
person Community    schedule 25.02.2014
comment
Примечание. Убедитесь, что функции getAge() и getName() возвращают правильные типы. - person ; 25.02.2014
comment
Я внес изменения и не получил никаких ошибок. Однако я не вывожу имя или даже возраст при выполнении основного метода: if (optionSelected == 2) { System.out.println(zac.displayProfile()); }. Какие-либо предложения? - person user3289740; 25.02.2014
comment
Он не распечатывает значения или только имя слова и возраст? Если это последнее, просто измените "%d, %s" на "Age: %f, Name: %s" - person ; 25.02.2014
comment
Привет, @jomahoney, спасибо за ответ. На самом деле он не печатает ни значение, ни слова «имя» и «возраст». Хотя я ХОЧУ распечатать значения возраста и имени. Какие-либо предложения? - person user3289740; 01.03.2014
comment
Я заметил, что в вашем и моем фрагментах кода отсутствует ;. Не видя всего кода, я не вижу проблемы. - person ; 03.03.2014

Вам нужно сделать это:

public String displayProfile() {
  return String.format("%d %s", getAge(), getName())

} 

Метод форматирования принимает несколько аргументов, первым всегда является форматируемая строка. Все остальные — это переменные, которые заменяют заполнители в первой строке. Итак, что вы в основном делаете здесь, это говорите java напечатать вам строку ("%d %s"), которая имеет два заполнителя (один для целых чисел, один для строк), разделенных одним пробелом. Затем вы вводите значения для своих заполнителей слева направо в том же порядке.

Также я настоятельно рекомендую вам начать просмотр с http://docs.oracle.com/javase/tutorial/ или какой-либо другой учебник.

person ingenious    schedule 25.02.2014

Вы можете использовать String.Format() как:

public String displayProfile() {
    return String.format("Age: %f, Name: %s", getAge(), getName());
}

Где %f обозначает тип с плавающей запятой, а %s — тип String. Я не думаю, что вам понадобятся числа с плавающей запятой для представления Age. Я бы предпочел использовать int и использовать %d для форматирования.

Подробнее о форматировании можно прочитать здесь

person Saro Taşciyan    schedule 25.02.2014