Изучение конструктора - нет вывода - PullRequest
0 голосов
/ 09 сентября 2018

Я новичок и изучаю методы и конструкторы. Следующие вопросы

  1. Когда я запускаю приведенную ниже программу в Eclipse, мне выдается сообщение об ошибке, что я могу объявить метод main как статический.
public class Mouse 
      {

        double version;

        String model;

        Mouse(double v, String m)
        {
            version = v;
            model = m;
        }

        void display()
        {
            System.out.printf("Version is ", +version);

            System.out.printf("Model is ",model);
        }

      }
     class DemoMouse
     {

          public static void main(String[] args) {
        {
            Mouse m = new Mouse(5.1, "Logitech");
            m.display();
            }
     }
  1. Когда я вынужден удалить статический файл из основного и сделать DemoMouse статическим, я не получаю полный вывод. является. Я ожидаю, что выход положен как
*Version is 2.4 
Model is Logitech*

    package test;

    public class Mouse
     {
        double version;

        String model;

        Mouse(double v, String m)
        {
            version = v;
            model = m;
        }

        void display()
        {
            System.out.printf("Version is ", +version);

            System.out.printf("Model is ",model);
        }
  }

    static class DemoMouse
    {

        public void main(String[] args) {
            {
                Mouse m = new Mouse(5.1, "Logitech");
                m.display();
        }
}

Ответы [ 3 ]

0 голосов
/ 10 сентября 2018

1. Вы должны объявить ваш метод main статическим. Причина этого в том, что вам нужен экземпляр класса для использования нестатических методов. Для более подробного объяснения взгляните на комментарий, который дал "howlger".

2. В вашем конструкторе, как и в вашем методе display, вы должны использовать «this.version» и «this.model». Это приводит к выделению значения, которое будет выделено для создаваемого экземпляра класса.

3.Вы должны использовать System.out.println для отображения своих данных. «println» ничего не говорит, кроме печати строки, которую вы передаете, и добавления перевода строки ко всей вещи (следующая строка).

printf немного сложнее. Объяснение, почему ничего не печатается с использованием метода printf, можно найти в ссылке:

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

Таким образом, обычно метод printf, который вы пытаетесь использовать, обычно получает 2 аргумента, формат, в котором вы хотите распечатать, и аргументы, которые вы хотите распечатать. Поскольку вы определяете формат как простую строку (без «% s» и т. П.), Не будет места для размещения любого аргумента, любой аргумент, который вы передаете методу, игнорируется, поскольку число определений формата <количество аргументов . </p>

0 голосов
/ 10 сентября 2018

Сделать класс, имеющий основной метод, общедоступным. Сделайте изменения ниже в вашем первом примере.

<b>public</b> class DemoMouse
{
    public static void main(String[] args) {
    {
        Mouse m = new Mouse(5.1, "Logitech");
        m.display();
    }
}
0 голосов
/ 10 сентября 2018

Использовать System.out.println Вместо System.out.printf

, но если вы хотите использовать printf, тогда вам нужно добавить %f для двойной строки и %s для строки в противном случае переменные не будут напечатаны. В этом случае

System.out.printf("Model is %.2f",version); //where %.2f restricts double to 2 decimal points
System.out.printf("model is %s", model);
...