-7

请帮我解决我的问题。如何获得总和值?

public class Exe {
    int sum;
    public int sumAB(int a,int b) {
        sum=a+b;
        return sum;
    }
}

public class Test {
    public static void main(String[] args){
        Exe e= new Exe();
        e.sumAB(2,3);
        System.out.println(e);
    }
}
4

4 回答 4

5

您需要使用一个变量来保存该方法返回的值的结果。代码有注释,提供了正确的解释。另外,请注意,我使用sumVar变量来表明它与类中的变量不同Exe尽管它具有相同的值

public class Test {
    public static void main(String[] args){
        Exe e= new Exe();
        //declaring variable sumVar
        int sumVar;
        //assigning the value returned of e.sumAB into the sumVar variable
        sumVar = e.sumAB(2,3);
        //printing the value of sumVar
        System.out.println(sumVar);
    }
}

请注意,在此代码中,我正在打印类中具有相同字段sumVar值的变量的结果。另一种解决方案可以通过覆盖类中的方法来完成:sumExetoStringExe

public class Exe {
    int sum;
    public int sumAB(int a,int b) {
        sum=a+b;
        return sum;
    }
    @Override
    public String toString() {
        return Integer.toString(sum);
    }
}

public class Test {
    public static void main(String[] args){
        Exe e= new Exe();
        e.sumAB(2,3);
        //this method will automatically call e.toString for you
        System.out.println(e);
    }
}

请注意,与toString单个字段属性值处理相比,该方法更多地用于提供信息。什么?我的意思是该toString方法最常用于显示对象的当前状态,而不是用于返回字段的值。让我们看一个例子:

public class Exe {
    int sum;
    public int sumAB(int a,int b) {
        sum=a+b;
        return sum;
    }
    @Override
    public String toString() {
        return Integer.toString(sum);
    }
}

public class Test {
    public static void main(String[] args){
        Exe e= new Exe();
        int sumVar;
        sumVar = e.sumAB(2,3);
        //print the value of sum
        System.out.println(sumVar);
        //print the value of sum using e.toString()
        System.out.println(e);
        //now, printing the result of adding 1 to sum
        System.out.println(1 + sumVar);
        //since you're adding a number you have to explicitly use toString() method
        System.out.println(1 + e.toString());
    }
}

结果:

5
5
6
15

在最后一个代码示例中,我们将看到它打印5为 的值sumVar5的值e.toString()。然后,我们需要打印1 + sum并使用这两种方法,我们看到它打印1 + sumVar=61 + e.toString()= 15。为什么?因为当向 a 添加任何内容时,String它会将其连接起来,并且15是与 连接的1结果5

简而言之:最好使用变量来保存方法返回的值的结果。

于 2013-06-27T19:18:05.470 回答
2

只是为了好玩,另一种(如果有点奇怪)方法似乎与 OP 的原始思路相匹配。覆盖将使测试代码按预期执行toStringExe

public class Exe {
    int sum;
    public int sumAB(int a,int b) {
        sum=a+b;
        return sum;
    }

    public String toString() {
        return String.valueOf(sum);
    }
}

说明:当您将对象传递给 print 方法时,print 方法String通过调用该对象的toString方法将该对象转换为 a。如果您的对象没有显式实现toString(或从实现的类继承),这将导致Object#toString被调用。这很少特别有用,因为它只是打印出对象的类和哈希码。通过显式定义一个toString方法,您可以获得 OP 似乎期望的行为。

正如我在回答开头所说的那样,这种方法有些异想天开。有关更合理的方法,请参阅其他答案。

于 2013-06-27T19:23:53.643 回答
0

您可以从外部访问实例的字段,除非它们是私有的。

public class Exe {
   int sum;
   (...)

System.out.println(e.sum);
于 2013-06-28T05:15:24.347 回答
0
public static void main(String[] args){
    Exe e= new Exe();
    int sum = e.sumAB(2,3);
    System.out.println(sum);
}

或者直接打印值而不分配给变量

 public static void main(String[] args){
    Exe e= new Exe();
    System.out.println(e.sumAB(2,3));
}
于 2013-06-27T19:17:46.500 回答