【问题标题】:Can a method return two values in Java? [duplicate]一个方法可以在 Java 中返回两个值吗? [复制]
【发布时间】:2016-05-22 09:00:39
【问题描述】:

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

main 方法将从输入中读取一系列数字,并使用下面的此方法评估每个数字是正数还是负数。

    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;
}

表达式 return positiveNumber 和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;

}

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

    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,这些方法可以让您更轻松地从输入中获取内容,而无需使用扫描仪。

【问题讨论】:

  • 对于您问题的第二部分,&amp; 表示“按位与”(除非 Java 在这方面与其他语言有完全不同的语法),并不意味着“返回这两者”。
  • 可以将方法的返回类型改为int[],返回return new int[]{positiveNumber, negativeNumber}
  • 你的方法只得到一个数,所以它只能返回正数或负数,但不能计算多少正数和负数.
  • 如果您想同时跟踪这两个数字,请将它们放入地图或自定义对象中并返回。

标签: java methods return


【解决方案1】:

我会建议创建一个类“NumCounter”

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;
}

【讨论】:

  • 我喜欢这个建议,但如何打印出来?在 main 方法中我不能只写 positiveOrNegativeNumber(n) 因为我错过了 numCounter 部分,我应该放什么?
【解决方案2】:

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

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

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      您可以尝试打包和解包这些数字。

      例如: 用这些 int 变量构造一个 int:positivenegative 掩码:

      int packed = positive << 16 | negative;
      

      您可以在 positiveOrNegativeNumberfunction 中返回该值,当您需要读取这些值时,将其解压缩:

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

      【讨论】:

        【解决方案5】:

        试试这个

         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)是正数的个数, 而array.get(1)是负数的个数。

        【讨论】:

        • @Tom 抱歉,我应该使用 get(position) 来获取 ArrayList 的元素
        【解决方案6】:

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

        但是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;
           }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-07-30
          • 2011-02-04
          • 1970-01-01
          • 2012-12-02
          • 2013-02-23
          • 1970-01-01
          • 2011-09-27
          • 2011-04-07
          相关资源
          最近更新 更多