繁体   English   中英

infile类。 构造函数未定义

[英]infile class. Constructor undefined

它不断告诉我,我的构造函数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();
     }
}

这是我的宠物课。

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;
     }
}

您的Pet类没有带String的构造函数,这是您在此行尝试的内容

p = new Pet(name)

做一个或做与演示类似的操作,即做一个新的Pet实例,然后在该实例上调用set("Name")

喜欢:

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

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

这就是为什么以下语句可以的原因:

Pet myDog = new Pet( );

您有问题的语句使用的构造函数带有尚未定义的参数

您将需要创建这样的构造函数( Pet(String name) {...} )或更改逻辑以使用默认的构造函数和set()方法。

在定义任何构造函数时会被警告,Java将不再为您创建默认的构造函数,因此您需要自己做。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM