【问题标题】:Having trouble creating overloaded constructor, instantiating an object在创建重载构造函数、实例化对象时遇到问题
【发布时间】:2016-02-07 03:32:01
【问题描述】:

我是 Java 新手,在听老师的视频讲座时遇到了问题(我正在参加在线课程),并且我在完成这项作业时遇到了问题:

创建一个 FitnessTracker 类,其中包含健身活动的数据字段、参与的分钟数、使用的卡路里和日期。该类包括获取每个字段的方法。此外,创建一个默认构造函数,自动将活动设置为“跑步”,将分钟设置为 0,使用的卡路里设置为 0,并将日期设置为当年的 1 月 1 日。将文件另存为 FitnessTracker.java。创建一个应用程序来演示每个方法是否正确工作,并将其保存为 TestFitnessTracker.java。

b.为您在练习 3a 中创建的 Fitness Tracker 类创建一个额外的重载构造函数。此构造函数接收每个数据字段的参数并适当地分配它们。将任何需要的语句添加到 TestFitnessTracker 应用程序以确保重载的构造函数正常工作,保存它,然后对其进行测试。

c。修改 Fitness Tracker 类,使默认构造函数调用四参数构造函数。将该类保存为 FitnessTracker2.java。创建一个应用程序来测试新版本的类,并将其命名为 TestFitnessTracker2.java。

我也一直在观看一些 youtube 视频,它们对理解有所帮助,但我仍然没有完全理解。 在“日期方法”旁边,我不断收到错误“修改日期的非法参数,只允许使用最终参数”,以及其他错误。 这是我到目前为止所拥有的,但我现在有点迷茫,不知道如何前进:

package javaProgramming;

import java.util.Scanner;

public class fitnessTracker {
    public static void main(String[] args){ 
       tracker trackerObject = new tracker("January 1st", "running", 0, 0);
    }
}

class tracker {
    public tracker(String date, String active, int mins, int cal){
       Scanner input = new Scanner(System.in);
    
       System.out.println("What day are you recording this activity for?");
       public String day = input.nextLine();
    
       System.out.println("What fitness exersise did you complete?");
       public String active = input.nextLine();

       System.out.println("How many minutes did you spend " + active + "?");
       public int mins = input.nextInt();
    
       System.out.println("How many calories did you burn?");
       public int cal = input.nextInt();
    }
            
    public static void date(String day){
           System.out.println("I did this on " + day + ".");
        
    public static void activity(String active){
        System.out.println("Today I plan on " + active);
    }
    
    public static void minutesSpent(int mins){
        System.out.println("I spent " + mins + " minutes doing so.");
    }
    
    public static void caloriesUsed(int cal){
        System.out.println("I burned " + cal + " calories.");
    }
}

如果有人能帮我解决这个问题,我们将不胜感激!

【问题讨论】:

  • 如果您想学习,请正确缩进您的代码,并使用 Java 代码格式化指南:类以大写字符开头。这可能看起来微不足道,但它很重要。

标签: java methods constructor overloading instantiation


【解决方案1】:

你不能在函数内部使用public,只能在类上下文中使用:

public String day = input.nextLine();

要么删除public

String day = input.nextLine();

或者将变量的声明移到类中:

class tracker{
    public String day;
    public tracker(String date, String active, int mins, int cal){
        day = input.nextLine();

【讨论】:

    【解决方案2】:

    试试这个。

    第 1 类(包含 main 方法)

    package javaProgramming;
    
    import java.util.Scanner;
    
    public class FitnessTracker {
    
        public static void main(String[] args){ 
            Tracker trackerObject = new Tracker("January 1st", "running", 0, 0);
            Scanner input = new Scanner(System.in);
    
            String day;
            String active;
            int mins;
            int cal;
    
    
            System.out.println("What day are you recording this activity for?");
            day = input.nextLine();
    
            System.out.println("What fitness exersise did you complete?");
            active = input.nextLine();
    
            System.out.println("How many minutes did you spend " + active + "?");
            mins = input.nextInt();
    
            System.out.println("How many calories did you burn?");
            cal = input.nextInt();
    
            trackerObject.date(day);
            trackerObject.activity(active);
            trackerObject.minutesSpent(mins);
            trackerObject.caloriesUsed(cal);
        }
    }
    

    二级

    package javaProgramming;
    
    class Tracker {
    
        private String day;
        private String active;
        private int mins;
        private int cal;
    
        public Tracker(String date, String active, int mins, int cal){
            this.day = date;
            this.active = active;
            this.mins = mins;
            this.cal = cal;     
        }
    
        public void date(String day){
            System.out.println("I did this on " + day + ".");
        }
        public void activity(String active){
            System.out.println("Today I plan on " + active);
        }
    
        public void minutesSpent(int mins){
            System.out.println("I spent " + mins + " minutes doing so.");
        }
    
        public void caloriesUsed(int cal){
            System.out.println("I burned " + cal + " calories.");
        }
    }
    

    我的版本:

    1. 按照惯例,类名以大写字母开头
    2. 扫描器输入仅发生在 main 方法中,将用户输入值传递给 Tracker 类,以便构造函数可以初始化每个变量的值。设置的值将传递给类中的 date、activity、minuteSpent、caloriesUsed 方法的每个参数。

    这是我控制台中的输出:

    What day are you recording this activity for?
    3
    What fitness exersise did you complete?
    squat
    How many minutes did you spend squat?
    5
    How many calories did you burn?
    100
    I did this on 3.
    Today I plan on squat
    I spent 5 minutes doing so.
    I burned 100 calories.
    

    我希望这会有所帮助!

    【讨论】:

    • 您确实为我指明了正确的方向,非常感谢!我很感激。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-05
    相关资源
    最近更新 更多