一个方法可以在Java中返回两个值吗?

时间:2016-05-22 09:00:39

标签: java methods return

程序应该返回序列中有多少正数和负数。

主要方法将从输入中读取一系列数字,并且每个数字使用以下方法评估它是正数还是负数。

    public static int positiveOrNegativeNumber(int n) {
    int positiveNumber; //counter for positive numbers
    int negativeNumber; //counter for negative numbers

    positiveNumber=0;
    negativeNumber=0;

    if (n>0) {
        positiveNumber = positiveNumber + 1;
    } else if (n<0) {
        negativeNumber = negativeNumber + 1;
    }
    return positiveNumber & negativeNumber;
}

表达式返回positiveNumber&amp; negativeNumber 将它们都归还?

编辑:所以,按照Java Geo的建议,我得到了这个:

    public static NumCounter positiveOrNegativeNumber(int n, NumCounter numCounter) {

if (n>0) {
    numCounter.setPositiveNumCounter(numCounter.getPositiveNumCounter()+1);
} else if (n<0) {
    numCounter.setNegativeNumCounter(numCounter.getNegativeNumCounter()+1);
}
return numCounter;

}

但我不知道在主要方法中应该添加什么来打印出来

    public static void main(String[] args) {
    int n;

    while(!Lettore.in.eoln()) { //while the line has not ended
        n = Lettore.in.leggiInt(); //read n from input
        // what is missing here??
        }
    }

不要担心Lettore.in.eoln和Lettore.in.leggiInt,这些方法只是让您无需使用扫描仪即可轻松获取输入内容。

6 个答案:

答案 0 :(得分:2)

不,positiveNumber & negativeNumber返回两个整数的按位AND的结果,并且根据您的逻辑,将始终返回0(0 & 1 == 00 & 0 == 0)。

如果要返回多个值,可以返回int[]或包含多个字段的类的实例。

那就是说,你的方法并不算什么。它接收一个数字,即使你返回了两个计数器,其中一个将为0而另一个为1(除非输入为0)。如果要计算序列中正值和负值的数量,则应将输入数字数组传递给方法。

如果您想为方法的每次调用传递一个序列号,您可以让您的positiveNumbernegativeNumber个成员static成员,并初始化它们到你方法之外的0。在这种情况下,您的方法根本不需要返回任何内容,因为您可以从方法外部访问计数器。

答案 1 :(得分:2)

我建议创建一个班级&#34; NumCounter&#34;

public class NumCounter {

    int positiveNumCounter;
    int negativeNumCounter;
    public int getPositiveNumCounter() {
        return positiveNumCounter;
    }
    public void setPositiveNumCounter(int positiveNumCounter) {
        this.positiveNumCounter = positiveNumCounter;
    }
    public int getNegativeNumCounter() {
        return negativeNumCounter;
    }
    public void setNegativeNumCounter(int negativeNumCounter) {
        this.negativeNumCounter = negativeNumCounter;
    }
}

然后修改您的方法,如

public static NumCounter positiveOrNegativeNumber(int n, NumCounter numCounter) {

    if (n>0) {
        numCounter.setPositiveNumCounter(numCounter.getPositiveNumCounter()+1);
    } else if (n<0) {
        numCounter.setNegativeNumCounter(numCounter.getNegativeNumCounter()+1);
    }
    return numCounter;
}

答案 2 :(得分:0)

不,您可以返回两个原始类型值,如上所示。

但Java有一个很好的功能来返回对象。在上面的例子中,您可以尝试返回一个Map或您自己的自定义对象,其中包含{“positiveNumber”,X}和{“negetiveNumber”,Y}

       //Define in class as:
    static Map<String, Integer> map =new  HashMap<String, Integer>();

    public static Map<String, Integer> positiveOrNegativeNumber(int n) {


       if (n > 0) {
           Integer positiveNumber = map.get("positiveNumber");
             if(positiveNumber != null){
                  positiveNumber = positiveNumber + 1;
                  map.put("positiveNumber", positiveNumber);
             }
             else
                 map.put("positiveNumber", 1);
       } else if ( n < 0 ) {
           Integer negetiveNumber = map.get("negetiveNumber");
           if(negetiveNumber != null){
               negetiveNumber = negetiveNumber + 1;
               map.put("negetiveNumber", negetiveNumber);
           }
           else
             map.put("negetiveNumber", 1);
       }

       return map;
   }

答案 3 :(得分:0)

没有。但是你可以返回一个数组。这些数字可能存储在数组中,可以返回数组。因此可以返回int数组。

答案 4 :(得分:0)

试试这个

 public static ArrayList<Integer> positiveOrNegativeNumber(int n) {
    int positiveNumber; //counter for positive numbers
    int negativeNumber; //counter for negative numbers

    positiveNumber=0;
    negativeNumber=0;

    if (n>0) {
        positiveNumber = positiveNumber + 1;
    } else if (n<0) {
        negativeNumber = negativeNumber + 1;
    }
    ArrayList<Integer> array = new ArrayList();
    array.add(positiveNumber );
    array.add(negativeNumber );
    return array ;
}

现在array.get(0)是positiveNumber的数量, 而array.get(1)是negativeNumber的数量。

答案 5 :(得分:0)

您可以尝试打包并打开这些号码。

例如: 使用那些int变量构造一个int:positivenegative蒙面:

int packed = positive << 16 | negative;

您可以在positiveOrNegativeNumber函数中返回该值,当您需要读取这些值时,请使用以下命令将其解压缩:

int unpackedNegative = packed & 0xffff;
int unpackedPositive = packed >> 16;