【问题标题】:Why can't my methods see the parameters being passed to them?为什么我的方法看不到传递给它们的参数?
【发布时间】:2012-10-22 01:59:01
【问题描述】:

我一直在做 Java 作业。以下是我的指示:

界面编程作业

创建一个名为 ISum 的接口。该接口应定义 2 个方法。第一种方法应该将两个整数作为参数并返回它们的总和。第二种方法应该将 2 个字符串作为参数并返回它们的连接。第二种方法应该是第一种方法的重载版本。

定义另一个名为 IVerage 的接口。该接口应定义一种方法,该方法采用 2 个整数参数并返回平均值。

创建一个名为 Calculator 的类,它实现了上面定义的两个接口。你的类必须实现异常处理。创建一个驱动程序类,允许用户调用您类中的每个方法。

到目前为止我的工作:

Main类:

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Calculator calculatorObject = new Calculator();
        Scanner scannerObject = new Scanner(System.in);

        System.out.println("Enter 1 for integer or 2 for string");
        int test1 = scannerObject.nextInt();

        switch (test1){
            case 1: 
                System.out.println("Enter 1st number");
                int int1 = scannerObject.nextInt();

                System.out.println("Enter 2nd number");
                int int2 = scannerObject.nextInt();   

                System.out.println("Enter 1 for sum or 2 for average");
                int test2 = scannerObject.nextInt(); 

                switch (test2){
                    case 1: 
                        int sum = calculatorObject.intSum(int1,int2);
                        System.out.println("The sum is " + sum);
                        break;

                    case 2:
                        int avg = calculatorObject.intAvg(int1,int2);
                        System.out.println("The avg is " + avg);
                        break;

                    default:
                        System.out.println("You entered an invalid option");    
                        break;    
                }

                break; 

            case 2: 
                System.out.println("Enter 1st string");
                String string1 = scannerObject.nextLine();

                System.out.println("Enter 2nd number");
                String string2 = scannerObject.nextLine();   

                String stringConcat = calculatorObject.stringSum(string1,string2);
                System.out.println("The sum is " + stringConcat);
                break; 

            default:
                System.out.println("You entered an invalid option");    
                break;
        }
    }
} 

ISum接口:

public interface ISum {

    public void intSum();
    public void intAvg();

}

IAverage接口:

public interface IAverage {

    public void intAvg();

}

Calculate类:

abstract class Calculator implements IAverage, ISum { 

    public int intSum (int1,int2){
        int int1;
        int int2;
        int sum = int1 + int2;
        return sum;
    }
    
    public String stringSum (string1,string2){
        String string1;
        String string2;
        String stringConcat = string1.concat(string2);
        return stringConcat;
    }

    public int intAvg(int1,int2){
        int int1;
        int int2;
        int avg = (int1 + int2)/2;
        return avg;
    }
    
}

【问题讨论】:

  • 您能告诉我们您的代码有什么问题吗?
  • 确保您返回并阅读“超载”的含义
  • 要挑剔,即使你缺少大块......方法不是传递参数,它们是传递参数。
  • 以后,请复制粘贴您得到的确切编译错误或异常堆栈跟踪,而不是像装饰一样忽略它们。它们本身就是整个答案。我们只需用外行的方式为您翻译。

标签: java


【解决方案1】:

乍一看,您的方法似乎看不到参数,因为ISum中的方法没有没有参数。

试试这个,你应该在路上:

public interface ISum {

    public int intSum(int first, int second);
    public int intAvg(String first, String second);

}

【讨论】:

  • 好吧,他还需要有一个int返回类型,而不是void
【解决方案2】:

您的说明声明创建了 2 个重载的方法。

public interface ISum {

 public void sum(int a,int b);
 <br>public void sum(String s1,String s2);

}

方法名称必须相同。
返回类型可以更改为 int 和 String。

【讨论】:

  • 如果在这里回答问题,请遵守 Java 命名标准。让我们不要传递坏习惯。
  • 这些参数上不应该有变量名吗?
  • 我的错!已更正。经过最后一分钟的更改,我忽略了它。
  • 为了避免其他人像我一样在谷歌上搜索,javacodegeeks.com/2011/08/java-naming-conventions.html 建议 Java 中的方法名称应该使用 lowerCamelCase。由于这是一个单词方法,这意味着它应该全部小写。
  • 是的,必须有变量名,我只是强调方法签名,因此省略了它。如果有混淆,我可以包含它。
【解决方案3】:

您在使用参数变量之前重新声明并重新初始化它们,因此在您触摸它们时它们是空白的。

例如:

public int intSum (int1,int2){

    int int1;
    int int2;

    int sum = int1 + int2;

    return sum;


}

在第一行 public int intSum (int1,int2){ 中,您将 int1 和 int2 声明为方法局部变量。你不需要再做 int int1;或int int2;。通过包含这些行,您将一无所有地覆盖它们。对于上述方法,您只需要:

public int intSum (int1,int2){

    int sum = int1 + int2;

    return sum;


}

编辑:derp,读取失败。你还应该给参数一个类型,所以

public int intSum (int int1, int int2){

    int sum = int1 + int2;

    return sum;


}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 2011-03-14
    • 1970-01-01
    • 2013-12-24
    • 2022-12-23
    • 1970-01-01
    • 2015-04-22
    相关资源
    最近更新 更多