Java 填充类。构造函数未定义

Java 填充类。构造函数未定义,java,Java,它一直告诉我,我的构造函数宠物是未定义的。有什么想法吗 在while循环之前,我曾尝试在我的主方法中定义Pet,但它给了我同样的问题 import java.util.*; import java.io.*; public class ReadPets { public static void main (String[] args) { ArrayList <Pet> petList = new ArrayList <Pet>

它一直告诉我,我的构造函数宠物是未定义的。有什么想法吗

在while循环之前,我曾尝试在我的主方法中定义Pet,但它给了我同样的问题

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();
     }
}
import java.util.*;
导入java.io.*;
公共类ReadPets
{
公共静态void main(字符串[]args)
{
ArrayList petList=新的ArrayList();
扫描仪填充=空;
字符串名;
petp;
尝试
{
infle=新扫描仪
(新文件输入流(“pets.txt”);
}
catch(filenotfounde异常)
{
System.out.println(“打开文件时出现问题”);
系统出口(0);
}
while(infle.hasNextLine())
{
name=infle.nextLine();
p=新宠物(名字);//这里是我的错误所在
添加(p);
}
infle.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;
     }
}
公共级宠物
{
私有字符串名称;
private int age;//以年为单位
私人双倍重量;//以磅为单位
/**
这只是一个演示程序。
*/
公共静态void main(字符串[]args)
{
宠物myDog=新宠物();
myDog.set(“Fido”,2,5.5);
myDog.writeOutput();
System.out.println(“更改名称”);
myDog.set(“Rex”);
myDog.writeOutput();
System.out.println(“改变重量”);
myDog.set(6.5);
myDog.writeOutput();
System.out.println(“改变年龄”);
myDog.set(3);
myDog.writeOutput();
}
公共无效写输出()
{
System.out.println(“名称:”+Name);
System.out.println(“年龄:“+Age+”年”);
系统输出打印项次(“重量:“+重量+磅”);
}
公共无效集(字符串newName)
{
name=newName;
//年龄和体重不变。
}
公共无效集(int-newAge)
{

如果(newAge您的
Pet
类没有采用
字符串
的构造函数,这正是您在这一行中尝试的

p = new Pet(name)
创建一个或执行与演示类似的操作,即创建新的
Pet
实例,然后在此实例上调用
set(“Name”)

比如:


我在您的
Pet
类中没有看到任何构造函数,这意味着Java将为您提供默认(无参数)构造函数

这就是为什么下面的陈述是正确的:

Pet myDog = new Pet( );
您遇到问题的语句使用了一个带有参数的构造函数,该参数是您尚未定义的

您需要创建这样的构造函数(
Pet(字符串名){…}
),或者更改逻辑以使用默认构造函数和
set()
方法


一旦您定义了任何构造函数,Java将不再为您创建默认构造函数,因此您需要自己创建。

您需要在我们的Pet类中用一个字符串编写一个参数化构造函数。

发布您的
Pet
类。它是否有一个将字符串作为参数的构造函数?
Pet myDog = new Pet( );