2013-12-08 3 views
0

Он продолжает говорить мне, что мой конструктор Pet не определен. Есть идеи?infile класс. Constructor undefined

Я пробовал определять Pet в моем основном методе до цикла while, но это дает мне ту же проблему.

import java.util.*; 
import java.io.*; 

public class ReadPets 
{ 
    public static void main (String[] args) 
    { 

      ArrayList <Pet> petList = new ArrayList <Pet>(); 
      Scanner inFile = null; 
      String name; 
      Pet p; 
      try 
      { 
       inFile = new Scanner 
       (new FileInputStream ("pets.txt")); 
      } 

      catch(FileNotFoundException e) 
      { 
       System.out.println("problem opening file."); 
       System.exit(0); 
      } 
      while (inFile.hasNextLine()) 
      { 
       name = inFile.nextLine(); 
       p = new Pet(name); // here is where my error is 
       petList.add(p); 
      } 
      inFile.close(); 
    } 
} 

Вот мой класс для домашних животных.

public class Pet 
{ 
    private String name; 
    private int age; //in years 
    private double weight; //in pounds 

    /** 
     This main is just a demonstration program. 
    */ 
    public static void main(String[] args) 
    { 
     Pet myDog = new Pet(); 
     myDog.set("Fido", 2, 5.5); 
     myDog.writeOutput(); 
     System.out.println("Changing name."); 
     myDog.set("Rex"); 
     myDog.writeOutput(); 
     System.out.println("Changing weight."); 
     myDog.set(6.5); 
     myDog.writeOutput(); 
     System.out.println("Changing age."); 
     myDog.set(3); 
     myDog.writeOutput(); 
    } 

    public void writeOutput() 
    { 
     System.out.println("Name: " + name); 
     System.out.println("Age: " + age + " years"); 
     System.out.println("Weight: " + weight + " pounds"); 
    } 

    public void set(String newName) 
    { 
     name = newName; 
     //age and weight are unchanged. 
    } 

    public void set(int newAge) 
    { 
     if (newAge <= 0) 
     { 
      System.out.println("Error: illegal age."); 
      System.exit(0); 
     } 
     else 
      age = newAge; 
     //name and weight are unchanged. 
    } 

    public void set(double newWeight) 
    { 
     if (newWeight <= 0) 
     { 
      System.out.println("Error: illegal weight."); 
      System.exit(0); 
     } 
     else 
      weight = newWeight; 
     //name and age are unchanged. 
    } 

    public void set(String newName, int newAge, double newWeight) 
    { 
     name = newName; 
     if ((newAge <= 0) || (newWeight <= 0)) 
     { 
      System.out.println("Error: illegal age or weight."); 
      System.exit(0); 
     } 
     else 
     { 
      age = newAge; 
      weight = newWeight; 
     } 
    } 

    public String getName() 
    { 
     return name; 
    } 


    public int getAge() 
    { 
     return age; 
    } 
    public double getWeight() 
    { 
     return weight; 
    } 
} 
+5

Опубликовать класс 'Pet'. Имеет ли он конструктор, который принимает строку как arg? – 4J41

ответ

1

Ваш Pet класс не имеет конструктор, который принимает String что то, что вы пытаетесь с этой линией

p = new Pet(name) 

Либо сделать один или сделать что-то похожее на демонстрацию, которая делает новый Pet экземпляр, а затем вызвать set("Name") этого экземпляра

как:

p = new Pet(); 
p.set(name); 
0

Я не вижу никаких конструкторов в вашем классе Pet, что означает, что Java предоставит вам конструктор по умолчанию (без аргумента).

Поэтому следующее утверждение OK:

Pet myDog = new Pet(); 

Утверждение, что у вас есть проблемы с использует конструктор с аргументом, что вы не определили.

Вам понадобится создать такой конструктор (Pet(String name) {...}) или изменить свою логику, чтобы использовать конструктор по умолчанию и свой метод set().

Будьте предупреждены, как только вы определите какой-либо конструктор, Java больше не будет создавать для вас конструктор по умолчанию, поэтому вам нужно будет сделать это самостоятельно.

0

Вы должны написать один параметризованный конструктор в нашем классе Pet с одной строкой.

Смежные вопросы