Почему printf не работает должным образом в Java?ДЖАВА - PullRequest
0 голосов
/ 05 февраля 2019

Я получаю сообщение об ошибке такого типа в моей программе Eclipse:

Вопрос

Почему я получаю сообщение об ошибке?

код:

    package loops;
    public class Escapey {
        public static void main(String[] args) {
            String name ="micheal";
            System.out.printf("i am %s, my friend name also %s",name);
        }
    }

Сообщение об ошибке:

Исключение в потоке "main" java.util.MissingFormatArgumentException: спецификатор формата '% s' в java.base / java.util.Formatter.format(Formatter.java:2672) в java.base / java.io.PrintStream.format (PrintStream.java:1053) в java.base / java.io.PrintStream.printf (PrintStream.java:949) в loops.Escapey.main (Escapey.java:5)

  • Выход исключен: (

Ответы [ 5 ]

0 голосов
/ 05 февраля 2019

Довольно неясный способ сделать это:

System.out.printf("i am %s, my friend's name also %<s", name);

Я буквально никогда не использовал это, но это упомянуто в документации Formatter.

Другой способ ссылаться на аргументы по позиции - использовать флаг '<' ('\u003c'), который вызывает повторное использование аргумента для предыдущего спецификатора формата.

0 голосов
/ 05 февраля 2019

Вы можете либо указать аргумент дважды, либо указать индекс при ссылке в строке формата:

System.out.printf("i am %1$s, my friend's name also %1$s", name);
0 голосов
/ 05 февраля 2019

используйте это ...

System.out.printf("i am %s, my friend name also %s",name, name);

Вы даете два спецификатора.Таким образом, вам нужно дать имя дважды здесь.

0 голосов
/ 05 февраля 2019

Одно решение,

System.out.print("i am " + name + ", my friend name also " + name); // If you want to continue on same line 
System.out.println("i am " + name + ", my friend name also " + name); // If you want to continue on next line 

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

System.out.printf("i am %s, my friend name also %s",name, name);

, либо указываете индекс встрока.%1$s получит первый аргумент, в этом случае name.

System.out.printf("i am %1$s, my friend's name also %1$s", name);

Подробнее здесь!:)

Краткое руководство по методу Java printf ()

Формат Java - индекс значений Java printf // explicit indexing, relative indexing

0 голосов
/ 05 февраля 2019

Имея два %s, printf ожидает two аргументов

как

System.out.printf("i am %s, my friend's name also %s",name, name);
...