【问题标题】:Java - Understanding classes, methods and parametersJava - 理解类、方法和参数
【发布时间】:2014-09-21 16:09:41
【问题描述】:

所以我对一般的编程非常陌生,而且我才刚开始学习 Java 暑期课程几周,我对这个需要使用三个类的简单 Java 计算器的作业感到非常困惑。

我决定编写代码并在一个类中“工作”,然后尝试将其拆分为必要的多个类。但是,我在这样做时遇到了麻烦。我想我对方法和参数的工作方式感到更加困惑。我非常感谢任何帮助解释它们在这个程序或类似程序中的工作方式,以便我能更清楚地理解它。

以下是我很难理解的部分说明...... “Driver 类是唯一具有 hmain(String[] args)method 的类。Driver 类应该调用 Menu 类中的一个方法来打印菜单,并且从该方法中应该调用 Actions 类中的方法以实现各自的功能菜单。”

Menu 类和方法调用工作正常,我计划基本上将其余部分添加到 Action 类中,但每次我弄乱它时,我都会更加困惑。我不知道它是否有区别,但我考虑将开关添加到 Menu 类,如果我这样做了,我是否需要将其作为调用开关的方法?这将如何运作?

import java.util.Scanner;
import java.io.*;

public class Driver {

public static void main(String[] args) {

    String s1 = Menu.getInput("Enter a numeric value: ");
    String s2 = Menu.getInput("Enter a numeric value: ");
    String option = Menu.getInput("Enter: \n 1=Add \n 2=Subtract \n 3=Multiply \n 4=Divide");

class Action {  
    int optionInt = Integer.parseInt(option);
    double result = 0;

    switch (optionInt) {
    case 1:
        result = addValues(s1, s2);
        break;
    case 2:
        result = subtractValues(s1, s2);
        break;
    case 3:
        result = multiplyValues(s1, s2);
        break;  
    case 4:
        result = divideValues(s1, s2);
        break;  

    default:
        System.out.println("You entered an incorrect value");
    }

public static String(
    System.out.println("The answer is " + result);
}

private static double divideValues(String s1, String s2) {
    double d1 = Double.parseDouble(s1);
    double d2 = Double.parseDouble(s2);
    double result = d1 / d2;
    return result;
}

private static double multiplyValues(String s1, String s2) {
    double d1 = Double.parseDouble(s1);
    double d2 = Double.parseDouble(s2);
    double result = d1 + d2;
    return result;
}

private static double subtractValues(String s1, String s2) {
    double d1 = Double.parseDouble(s1);
    double d2 = Double.parseDouble(s2);
    double result = d1 - d2;
    return result;
}

private static double addValues(String s1, String s2) {
    double d1 = Double.parseDouble(s1);
    double d2 = Double.parseDouble(s2);
    double result = d1 + d2;
    return result;
  }
 }

}   

class Menu {    
    public static String getInput(String prompt) {
        String option;
        Scanner scan = new Scanner(System.in);
        System.out.println(prompt);
        return option = scan.nextLine();
    }
}

感谢您的帮助!!

斯科特

【问题讨论】:

  • 你的教授教过你面向对象的编程吗?
  • 尝试使用 Eclipse 之类的 IDE。 IDE 将允许您选择一个文件选项来创建新类,如果您的代码无法编译(如您的情况),它将通知您。
  • 我在为其他类创建要调用的方法以及我需要什么参数时遇到更多麻烦。
  • 好的,我想我知道如何设置课程了。 Eclipse 上类的新文件的好主意。我的新问题是如何调用addValues、SubtractValues、divideValues,而multiplyValues是Menu类。我不确定要在通话中提出什么论据?我认为它应该看起来类似于...Action.addValues(....);我不知道要添加什么参数。
  • 您必须实例化该类的一个对象,然后调用该类的方法。 Action action = new Action(),然后是action.addValues(..)

标签: java class methods parameters arguments


【解决方案1】:

我认为这可能是您正在寻找的:

import java.util.Scanner;
import java.io.*;
public class Driver {
public static void main(String[] args) {
    // get the Menu instance & call the method to get the menu list 
    Menu m = new Menu();
    m.getMenu();
 }
}

注意:注意这里为了调用驻留在另一个类中的方法,您首先需要获取该类的实例,然后在该实例上调用该方法。就像上面的m.getMenu()

在 Menu 类中你需要编写如下逻辑:

class Menu {
public void getMenu() {
// take the user inputs and write your validation and proper conversion logic e.g   'int' or 'double' what ever you want
    Scanner s = new Scanner(System.in);
    System.out.println("Enter the first number :");
    double num1 = s.nextDouble();
    System.out.println("Enter the second number :");
    double num2 = s.nextDouble();
    System.out.println("Please select an operation :");
    System.out.println("1 - Add " + "\n" + "2 - Subtract" + "\n"
            + "3 - Multiply" + "\n" + "4 - Divide");

    int choice = s.nextInt();
    Double result;
    Action service = new Action();
    switch (choice) {
    // call the appropriate method based on user selection
    case 1:
        result = service.addValues(num1, num2);
        service.displayResult(result);
        break;
    case 2:
        result = service.subtractValues(num1, num2);
        service.displayResult(result);
        break;
    case 3:
        result = service.multiplyValues(num1, num2);
        service.displayResult(result);
        break;
    case 4:
        result = service.divideValues(num1, num2);
        service.displayResult(result);
        break;
    default:
        System.out.println("Your choice is invalid.");

    }

 }

}

注意:在这里,您除了获取用户输入并将这些输入作为参数传递给适当的方法之外什么都不做。 (这里再次注意,方法是如何被调用的)。

在 Action 类中放置你的服务逻辑

class Action {
    public double addValues(double a, double b) {
    return a + b;
}

public double subtractValues(double a, double b) {
    return a - b;
}

public double multiplyValues(double a, double b) {
    return a * b;
}

public double divideValues(double a, double b) {
    return a / b;
}

public void displayResult(double result) {
    System.out.println("Result is :" + result);
}
}

注意:这里每种方法都有不同的用途。当您通过将用户输入作为参数传递来调用此类实例上的任何方法时,它只是起到了作用。

附注: 方法很像你的行为。简单地将自己视为一台机器。现在,当你口渴时,你会喝水,对吧?所以这是你的大脑main(),它指示你的手执行一些任务,就像你在这里调用一种方法来达到目的一样。 (我不知道我能说清楚多少,但我希望这在某种程度上对你有帮助:))

【讨论】:

  • 我认为澄清了一切都很好,谢谢!我确实有一个问题,在上面的代码中,您似乎将方法从 String(我最初拥有它的方式)更改为 double。我认为这是让我感到困惑的地方。我想你的方式更好?这样你就不必像我一样在任何地方从字符串转换为双精度数?再次感谢!
  • 另外,为什么菜单中的 m = new Menu() & m.getMenu。我可以这样称呼它吗...Menu.getMenu();而不是我猜是创建一个新变量(m)?另外,服务在哪里发挥作用?换句话说,为什么是 service.addValues?为什么不是 Action.addValues(num1, num2);你不必使用 Action 因为你从 Action 类中调用它们吗?我也看不到服务如何在 Action 类中发挥作用。再次感谢!
  • 我发誓这是我的最后一个问题...在默认的开关中,如果他们输入了未列出的选项,如果他们输入错误的选项,我怎样才能让它重新启动开关并且不必重新运行程序?我可以在开关内执行此操作,还是需要将开关放在 while 循环中?
  • @user3862586 是的,你是对的。不用在这里创建实例变量m,您可以直接编写类似:new Menu().getMenu() 的内容。请注意,正如我之前提到的,为了调用驻留在另一个类中的方法,您首先需要获取该类的实例,就像这里的new Menu()
  • 谈到您的第二个问题,是的,我已经从您发布的原始版本中更改了一些变量名称。其实,这无所谓。您可以指定任何名称。看到你可以根据你的约定更改它service 是这里的Action 类实例的名称,你也可以将其改为actionAction action= new Action(); 然后调用相应的方法,如action.addValues(); 等。
【解决方案2】:

首先,我会推荐一本好书,否则,请查看 Oracle 的资源,例如 this...

Java 是一种面向对象的语言。对象是类的一个实例。想想像模块这样的类,它们在逻辑上是分开的,理论上应该是可运行且符合逻辑的,不仅在您创建它的环境中,而且在其他场景中也是如此。

例如,您可能有一个名为 Car Park 的程序,它是驱动程序(包含 main 方法,Java 程序的入口点)。然后,您有一个名为 Car 的类和一个名为 Person 的类。一个类应该包含与该类相关的变量和方法。因此,在 Car 类中,您可能有 colour、noOfWheels、noOfSeats 等变量。car 类还可能包含与该类关联的“做事”的方法,例如 updateColor()changeNoOfWheels()。

关于方法和参数,真的很简单。 当一个方法被这样定义时:

public void updateColor(Color newColor)
{
    color = newColor;
}

在括号之间传递的颜色称为formal 参数。它定义了实际调用该方法时所需的type。这可以是任何类型,具体取决于您的方法。将两个整数相加的方法可以接受 (int x, int y 作为其参数。 此方法只是获取传递给它的颜色,并将其分配给汽车的颜色(在调用该方法时更新颜色)。

从驱动程序类中,您必须从该类中实例化对象。 所以,

Car myCar = new Car()

一旦实例化,就可以调用属于它的方法了。

myCar.updateColor(red);

这里括号之间的颜色是actual parameter。这假定 red 是颜色的预定义变量,否则您可以调用 new Color() 并定义自己的变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-13
    • 2021-12-12
    • 2015-02-14
    相关资源
    最近更新 更多