2016-09-27 99 views
-2

我目前正在创建一个代码,该代码具有将继承超类的数据字段和方法的子类。该子类也将有一个额外的领域,但我想从一个领域开始。错误:找到合适的构造函数并找不到符号

我正在使用名为birds.csv的输入文件,它具有4列。我想添加第5个coumn,我已经做了10行数据。

我正在使用该子类来获取和设置字段的方法并初始化它。

我目前有4个错误与我的代码,我真的需要帮助我需要修复。

代码:

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 

public class TestingCode { 

    public static void main(String[] args) { 
    //error checking for commandline input 
     if(args.length != 1){ 
     System.out.println("Please enter at least one input file into the argument."); 
     //terminates the program if more than 1 is entered 
     System.exit(1); 
     } 

     String csvFile = args[0]; 
     String line = ""; 
     String cvsSplitBy = ","; 

     List<HawaiiNativeForestBirds> listofBirds = new ArrayList<HawaiiNativeForestBirds>(); 
     try (BufferedReader br = new BufferedReader(new FileReader(csvFile))) { 

     while ((line = br.readLine()) != null) { 

      // use comma as separator 
      String[] bird = line.split(cvsSplitBy); 
      HawaiiNativeForestBirds Hawaiinbird = new HawaiiNativeForestBirdsWithMoreData(bird[0],bird[1],bird[2],Integer.valueOf(bird[3]),bird[4]); 
      listofBirds.add(Hawaiinbird); 
     } 
     } 
     catch (IOException e) { 
     e.printStackTrace(); 
     } 

     HawaiiNativeForestBirds[] hbirds=new  HawaiiNativeForestBirds[listofBirds.size()]; 
     System.out.println("index " + " element "); 
     int i=0; 
     for (HawaiiNativeForestBirds hbird:hbirds){ 
     i++; 
     System.out.println(i+"   "+hbird); 
     } 

     hbirds= listofBirds.toArray(new HawaiiNativeForestBirds[listofBirds.size()]); 

     System.out.println("index " + "name "+ " Scientific Name  "+ "  Color  " +  "  Population");   
     i=0; 
     for (HawaiiNativeForestBirds hbird:hbirds){ 
     i++; 
     System.out.println(i+" "+hbird.toString()); 
     } 

     hbirds= listofBirds.toArray(new HawaiiNativeForestBirds[listofBirds.size()]); 

     System.out.println("index " + "name "+ " Scientific Name  "+ "  Color  " +  "  Population");   
     i=0; 
     for (HawaiiNativeForestBirds hbird:hbirds){ 
     i++; 
     System.out.println(i+" "+hbird.toString2()); 
     } 

     hbirds= listofBirds.toArray(new HawaiiNativeForestBirds[listofBirds.size()]); 

     System.out.println("index " + "name "+ " Scientific Name  "+ "  Color  " +  "  Population" +  "  Author");   
     i=0; 
     for (HawaiiNativeForestBirds hbird:hbirds){ 
     i++; 
     System.out.println(i+" "+hbird.toString3()); 
     } 
    } 
} 

class HawaiiNativeForestBirds { 
    protected String name; 
    protected String scientificname; 
    protected String color; 
    protected Integer population; 

    public HawaiiNativeForestBirds(){ 
    } 

    public HawaiiNativeForestBirds(String name, String scientificname, 
     String color, Integer population) { 
     super(); 
     this.name = name; 
     this.scientificname = scientificname; 
     this.color = color; 
     this.population = population; 
    } 

    // getters and setters hidden 

    public String toString() { 
     String output = name + "  " + scientificname + "    " + color + "   " + population; 
     return output; 
    } 

    public String toString2() { 
     population = population + 1; 
     String output = name.toUpperCase() + "  " + scientificname.toUpperCase() + "    "+ color.toUpperCase() + "   " + population; 
     return output; 
    } 
} 

HawaiiNativeForestBirdsWithMoreData

class HawaiiNativeForestBirdsWithMoreData extends HawaiiNativeForestBirds { 

    private String author; 

    public HawaiiNativeForestBirdsWithMoreData(){ 
    } 

    public HawaiiNativeForestBirdsWithMoreData(String name, String scientificname, 
     String color, Integer population, String author) { 
     super(name, scientificname, color, population); 
     this.author = author; 
    } 

    public String getAuthor() { 
     return author; 
    } 

    public void setAuthor(String author) { 
     this.author = author; 
    } 

    public String toString3() { 
     population = population + 1; 
     String output = name.toUpperCase() + "  " + scientificname.toUpperCase() + "    " + color.toUpperCase() + "   " + population + "   " +author.toUpperCase(); 
     return output; 
    } 
} 

这里是我的错误:

TestingCode.java:84: error: cannot find symbol 
     System.out.println(i+" "+hbird.toString3()); 
             ^
    symbol: method toString3() 
    location: variable hbird of type HawaiiNativeForestBirds 
1 error 

这里是我的输入文件: birds.csv

+0

您没有定义接受您传递参数的构造函数。看看你的构造函数,并确定你认为哪一个应该被称为 – Kon

+0

,那么我应该修改哪一个来解决所有这些问题?使用HawaiiNativeForestBirdsWithMoreData取而代之? – Siegfraud245

+0

构造函数告诉你它期望的是什么参数,以及它们有多少。例如'HawaiiNativeForestBirds(String name,String scientificname,String color,Integer population)'。如果你传入的东西不是'name','scientificName','color'或'population'(*按顺序*),那么你的代码将不起作用。请注意错误消息中的行号,并查找您不了解的错误。 – nbrooks

回答

1

问题可能不在于你的构造函数是如何声明鸟的实例的。你有,构造函数为(String,String,String,Int,String),但是你的数据是按顺序(String,String,Int,String)。仔细检查您的csv文件中的订单,并确保它与您在参数中传递的顺序相匹配。

编辑:检查csv文件后。人口是在列表中的第4项,所以

HawaiiNativeForestBirds Hawaiinbird= new HawaiiNativeForestBirds(bird[0],bird[1],Integer.valueOf(bird[2]), bird[3]); 

此外,如所指出的,存在,所以你需要更新,以适应它的构造函数传递一个第五个参数。

编辑为最后一个错误:

阵列的数据类型不使用toString3()方法多什么是必要的。即使实际类型包含toString3(),只有类型为HawaiiNativeForestBirds的用户才能访问toString()和toString2()。

+0

构造函数需要4个参数。你正在传递5个参数,就像OP一样。这是第一个问题。 – nbrooks

+0

是的,我想通过5个参数 – Siegfraud245

+0

好吧!我设法解决了两个减少所有问题并解决大部分问题的问题。仍然只有1个错误!我在顶部 – Siegfraud245

相关问题