【问题标题】:How do I use a void method without printing?如何在不打印的情况下使用 void 方法?
【发布时间】:2017-03-01 08:16:37
【问题描述】:

我在理解需要为课堂编写的程序时遇到问题。我的程序可以正常工作,但问题是它希望我不要在我的方法中打印。我对应该如何输出我的值感到困惑,因为我的方法必须根据问题是无效的(它不返回任何内容)并且我无法在其中打印。

问题来了:

设计并实现一个java程序(命名为ArrayMethods),它定义了4个方法如下:

int arrayMax(int[] 数组)

int arrayMin(int[] 数组)

void arraySquared(int[] 数组)

void arrayReverse(int[] 数组)

通过在 main 方法中创建一个长度为 5 的数组并用 1 到 1000 之间的随机数填充它来测试您的方法。然后您的程序应该显示原始数组,显示数组中的最小数,显示最大数数组,显示尊敬的数组,并显示数组中每个值的平方。您的主方法应该只调用每个方法一次,每次调用都使用原始数组作为实际参数。 方法中没有打印。 记录您的代码,并正确组织/分隔您的输出。在适用时使用转义字符和格式化对象。

所以我的问题又是:如果我不能返回值,如何使用这些方法而不打印任何内容?如果有人能给我一个关于如何解决这个问题的线索,将不胜感激。

import java.util.Random;
import java.util.Arrays;
public class ArrayMethods
{
   public static void main (String[] args)
   {
   int[] array = new int[5];
   array[0] = (int)(Math.random() * (1000 - 1)) + 1;
   array[1] = (int)(Math.random() * (1000 - 1)) + 1;
   array[2] = (int)(Math.random() * (1000 - 1)) + 1;
   array[3] = (int)(Math.random() * (1000 - 1)) + 1;
   array[4] = (int)(Math.random() * (1000 - 1)) + 1;
     System.out.println("The values within the array are: " + Arrays.toString(array));
     System.out.println("The maximum value within the array is: " + arrayMax(array));
     System.out.println("The minimum value of the array is: " + arrayMin(array));
     System.out.print("The values within the array (squared) are: ");
     arraySquared(array);
     System.out.print("\n");
     System.out.print("The array reversed is: ");
     arrayReverse(array);
   }
   public static int arrayMax (int[] array)
   {
     int max = 0;
     for (int i = 0; i < array.length; i++)
        {
           if (array[i] > max)
              {
              max = array[i];
              }
        }
     return max;
   }

   public static int arrayMin (int[] array)
   {
     int min = 1000;
       for (int i = 0; i < array.length; i++)
              {
              if (array[i] < min)
                  {
                 min = array[i];
                  }
              }
     return min;
    }

   public static void arraySquared (int[] array)
   {
       int[] array2 = new int[5];
     for (int i = 0; i < array.length; i++)
        {
           array2[i] = array[i] * array[i];
           System.out.print(array2[i]);
              while ( i < array.length - 1)
                 {
                 System.out.print(", ");
                 break;
                 }
        }
   }

  public static void arrayReverse (int[] array)
   {
     for(int i = array.length - 1; i >= 0; i--)
        {
           System.out.print(array[i] + " ");
        }

   }
}

【问题讨论】:

  • 他们告诉你写返回整数的函数,而不是 void。根据您发布的说明,ArraySquared 和 arrayReversed 不应该是无效的。所以是的,你应该返回值。
  • 正确。但是看看底部的其他两种方法。它们是无效的。我忘了把它添加到我的问题中。
  • 应该注意的是,如果一个函数不返回值,你的 only 其他选项是改变全局状态(例如打印)。应该尽可能少地改变全局状态而不是返回值!不要完成这个任务并认为返回值是一件坏事或罕见的事情!
  • 谢谢 Carcigenicate!
  • np。自从我开始函数式编程以来,我就个人不喜欢 void 方法哈哈,所以我不得不在那里咆哮几秒钟。

标签: java methods printing return void


【解决方案1】:

对于 void 函数,在 C# 中您只需使用“out”或“ref”关键字。如果他们坚持使用 Java,Java 没有等价物,但您可以对对象做类似的事情。

public class PassArray
    {
        public int[] array;

        public PassArray(int[] array)
        {
            this.array = array;
        }
    }

    public static void Reverse(PassArray arrayHolder)
    {
        int[] reversed = new int[arrayHolder.array.Length];

        int j = 0;

        for (int i = arrayHolder.array.Length - 1; i >= 0; i--)
        {
            reversed[j] = arrayHolder.array[i];
            j++;
        }

        arrayHolder.array = reversed;
    }

    static void Main(string[] args)
    {
        int[] toReverse = new[] { 10, 30, 2, 1, 3, 100, 340 };

        PassArray passedObject = new PassArray(toReverse);

        Reverse(passedObject);
        // passedObject.array will now have the reversed array
    }

显然这可以改进,但至少应该给出正确的想法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多