不能通过值返回到基类/布尔总是返回false

问题描述 投票:0回答:3

我挣扎在这个子类,它是一个项目一个位。我的构造函数需要调用minPassingAvg变回基类(孩子),但不断收到的编译器错误(不能转换为字符串),这甚至不是我的本意,并用作我下面用一个布尔条件它总是返回false。在这一点上,我不知道什么是需要的或我当前的代码是不必要的。

    import java.util.List;

    public class MonitoredKid extends Kid{

      public int minPassingAvg;

      public MonitoredKid(int minPassingAvg) {

         super(minPassingAvg);

      }


      public void setMinPassingAvg() {

         this.minPassingAvg = minPassingAvg;

      }

     public int getMinPassingAvg(){  
          return minPassingAvg;
       }


      public boolean isInTimeOut() {

         if(getAverageScore() >= minPassingAvg ) // If kid's average test scores
                                                 // are above minimum average he 
                                                 //   is not in time out
            {
            System.out.print("no");
            return true;
            }

            else{
             System.out.print("yes");

            return false;
            }

           }

       }

============================
        public Kid()
   {  
      name = "";
      totalScore = 0;
      testCount = 0;
   }



   public Kid(String n)
   {  
      name = n;
      totalScore = 0;
      testCount = 0;
   }


      public double getAverageScore()
       {  
          return totalScore / testCount;
       }

       public double getTotalScore()
       {  
          return totalScore;
       } 

       public void addTest(int score)
       {  
          if(score >= 0 && score <= 100)
          {
             totalScore = totalScore + score;
             testCount= testCount+ 1;
          }
          else
          {
            System.out.println("Scores must be between 0 and 100");

          }
}
===========================
     import java.util.Scanner;

 public class MonitoredKidTest
    {  
       public static void main(String[] args)
       {  
          Scanner keyboard = new Scanner(System.in);

          int avgNum = 0;

          System.out.print("Enter the minimum passing average: ");
          avgNum = keyboard.nextInt();

          Monitoredkid kid2= new Monitoredkid(avgNum);

         kid2.isOffProbation(avgNum);
java
3个回答
1
投票

你看到一个错误,因为你的基类Kid具有字符串参数的构造函数,你是从MonitoredKid整数调用它

为了解决这个问题,你可以创建在父类Kid一个构造函数接受整数作为参数。

您也可以通过改变参数类型要么类解决这个问题,并使它保持一致或执行类型转换。我想说的转换参数IntegerString是更好,如果父类被其他子类为好。


0
投票

检查儿童类的构造函数,如果它被接受作为输入的整数。如果没有,那么你需要建立一个接受整数作为输入一个构造函数。还粘贴确切的错误和堆栈跟踪别人理解你的问题很好。


0
投票

这里的问题是,儿童类的构造函数接受一个字符串参数,你怎么称呼它使用超级但你传递一个int,而不是。据我所知,名字是一个字符串,所以你可能需要做出另一个构造函数或改变现有的儿童的构造函数接受字符串,如果你不需要它。为您的应用工作,你需要在你的儿童类的int字段,然后一个构造函数将初始化它,你可以自由地做出一个完全新的构造或删除现有的一个,根据您的要求,如下:

public class Kid {

    public int minPassingAvg;

    public Kid(int minPassingAvg) {
        this.minPassingAvg = minPassingAvg
    }

}

到那时你的MonitoredKid类,你将有你的常规构造如下

public class MonitoredKid extends Kid{

      public int minPassingAvg;

      public MonitoredKid(int minPassingAvg) {

         super(minPassingAvg);

      }
}

所以你在这种情况下,看你会不会得到一个错误,因为当你使用关键字super,这意味着调用父类的构造函数,所以你现在调用构造函数和传递一个int,它是你是什么已经在做,但在儿童类的构造函数期待一个字符串不是int,因为你在参数“字符串名称”输入所以它试图为int到字符串转换,但现在它期待一个int和你发送它一个int。

© www.soinside.com 2019 - 2024. All rights reserved.