当前位置: 首页 > 知识库问答 >
问题:

Java中跨类方法和面向对象逻辑的若干问题

宇文和同
2023-03-14

我正在学习Java初学者课程,我正在做我的第一个面向对象的作业。我确实了解OOP的基础知识,但我不具备将其付诸实践所需的知识。如果有人能指出任何新手的错误或给我一些建议,我将非常感激。

class savings{
    public static void main(String[] args){
        double annualInterestRate = 0;
        double monthlyInterest = 0;
        SavingsAccount saver1 = new SavingsAccount(2000, .03);
        SavingsAccount saver2 = new SavingsAccount(4000, .03);
        calculateMonthlyInterest(saver1);
        System.out.println("Monthly Interest at 3%: " + monthlyInterest);
        calculateMonthlyInterest(saver2);
        System.out.println("Monthly Interest at 3%: " + monthlyInterest);
        modifyInterestRate(saver1);
        modifyInterestRate(saver2);
        calculateMonthlyInterest(saver1);
        System.out.println("Monthly Interest at 5%: " + monthlyInterest);
        calculateMonthlyInterest(saver2);
        System.out.println("Monthly Interest at 5%: " + monthlyInterest);
    }
}

class SavingsAccount{
    static double annualInterestRate;
    static private double savingsBalance;
    public static double calculateMonthlyInterest(double annualInterestRate){
                double monthlyInterest = 0;
                monthlyInterest = savingsBalance * annualInterestRate / 12;
                return monthlyInterest;
        }
    public static void modifyInterestRate(double annualInterestRate){
        annualInterestRate = .05;
    }
    SavingsAccount(double savingsBalance, double annualInterestRate){
        this.savingsBalance = savingsBalance;
        this.annualInterestRate = annualInterestRate;
    }
}
F:\Archive\Homework_Spring_2014\Java\Project 2\Savings\savings.java:7: error: cannot find symbol
        calculateMonthlyInterest(saver1);
        ^
  symbol:   method calculateMonthlyInterest(SavingsAccount)
  location: class savings
F:\Archive\Homework_Spring_2014\Java\Project 2\Savings\savings.java:9: error: cannot find symbol
        calculateMonthlyInterest(saver2);
        ^
  symbol:   method calculateMonthlyInterest(SavingsAccount)
  location: class savings
F:\Archive\Homework_Spring_2014\Java\Project 2\Savings\savings.java:11: error: cannot find symbol
        modifyInterestRate(saver1);
        ^
  symbol:   method modifyInterestRate(SavingsAccount)
  location: class savings
F:\Archive\Homework_Spring_2014\Java\Project 2\Savings\savings.java:12: error: cannot find symbol
        modifyInterestRate(saver2);
        ^
  symbol:   method modifyInterestRate(SavingsAccount)
  location: class savings
F:\Archive\Homework_Spring_2014\Java\Project 2\Savings\savings.java:13: error: cannot find symbol
        calculateMonthlyInterest(saver1);
        ^
  symbol:   method calculateMonthlyInterest(SavingsAccount)
  location: class savings
F:\Archive\Homework_Spring_2014\Java\Project 2\Savings\savings.java:15: error: cannot find symbol
        calculateMonthlyInterest(saver2);
        ^
  symbol:   method calculateMonthlyInterest(SavingsAccount)
  location: class savings
6 errors

Tool completed with exit code 1

我相信这些错误是由跨类引用的方法造成的,但我不知道正确的方法。

共有1个答案

左恺
2023-03-14

对不起,你的一切都搞砸了。

  • 使所有SavingsAccount方法和字段非静态。全部。
  • 不要将SavingsAccount变量传递给方法参数,因为这没有意义。相反,在SavingsAccount实例上调用方法,而不是相反。
  • 调用用于定义方法的参数类型时,传入正确的参数。
  • 读你的书,检查你的笔记,因为你不能猜测这些东西,尤其是在开始的时候。这是一个很高的山,你必须攀登时,开始编程,所以使用您的资源材料的帮助,你已经有。他们会帮你越过那些高峰的!
 类似资料:
  • 我试图理解JVM的内存管理方案 考虑A、B两类 从主B B=新B(); 据我所知,类加载器将加载A、B,并分别创建2个对象。是否有任何其他对象将被创建? 另外,我问题的第二部分是,在访问Java Visual VM时,我看到Java NIO包的对象已经创建。有什么方法可以阻止JVM创建与我的项目无关的对象吗?

  • 我们已经讨论了类与对象的功能部分,现在我们来看一下它的数据部分。事实上,它们只是与类和对象的名称空间 绑定 的普通变量,即这些名称只在这些类与对象的前提下有效。 有两种类型的 域 ——类的变量和对象的变量,它们根据是类还是对象 拥有 这个变量而区分。 类的变量 由一个类的所有对象(实例)共享使用。只有一个类变量的拷贝,所以当某个对象对类的变量做了改动的时候,这个改动会反映到所有其他的实例上。 对象

  • 我有一个父类,它定义了链表方法(返回“this”的方法)的集合。我想定义多个子类,这些子类包含自己的链式方法,但也“重写”父方法,以便返回子类的实例而不是父类。 我不想在每个子类中重复相同的方法,这就是为什么我有一个父类,其中包含所有子类共享的方法。谢谢

  • 因此,每个功能区显然都在数据库中,但它们还需要一些逻辑来确定用户何时获得了功能区。 按照我的编码方式,是一个简单的接口: 是一个抽象类,它实现了接口,避免了方法的定义: 现在,将像这样实现一个特定的功能区: 这段代码工作得很好,表是按照我期望的方式在数据库中创建的(我在本地环境中使用DDL生成)。 问题是,在域对象中编写业务逻辑感觉是错误的。这是好的练习吗?你能提出一个更好的解决方案吗?此外,我不

  • 我试图在有向图中检测一个循环 在提出解决该问题的逻辑时,我发现一个简单的图遍历等式dfs就足够了,因为在执行dfs时,我们可以有一个条件来查看是否已经访问了任何节点。如果是这样,就必须有一个循环 在查找交叉检查逻辑的解决方案时,我遇到了这样一个解决方案,即在执行dfs的同时跟踪访问的节点,您还需要跟踪递归堆栈中的节点,如果一个节点已经在递归堆栈中,那么就有一个循环-我不理解 当我们可以简单地检查是