【问题标题】:How do I keep the Reversed method from affecting the Squared output?如何保持 Reversed 方法不影响 Squared 输出?
【发布时间】:2018-08-17 16:25:52
【问题描述】:
public static void Reversed (int[] array){
  for (int i = 0; i < array.length / 2; i++){
     int temp = array[i];
     array[i] = array[array.length - (1 + i)];
     array[array.length - (1 + i)] = temp;
  }
}
public static void Squared (int[] array){
  for (int i = 0; i < array.length; i++){
     array[i] = array[i] * array[i];
  }
}
public static void main (String[] args){
  int[] list = new int[5];
  for (int i = 0; i < list.length; i++)
     list[i] = (int) (Math.random() * 1001);

  System.out.println ("The original set is " + Arrays.toString(list) + ".");
  System.out.println ("\nThe largest number is " + Max(list) + ".");
  System.out.println ("The smallest numer is " + Min(list) + ".");

  Reversed(list);
  System.out.println ("The reversed array is " + Arrays.toString(list) + ".");    

  Squared(list);
  System.out.println ("The array squared is " + Arrays.toString(list) +       
    ".");
  }

这些方法按预期工作,但输出也会反转平方数,即使它们不应该反转。平方集应该与原始随机生成的集具有相同的顺序。我尝试将 Squared 方法放在 Reversed 方法之前,但它没有任何影响。有没有办法让某种方法“自包含”?

提前致谢!!!

【问题讨论】:

  • 我只是尝试在 main 方法中切换 Reversed 和 Squared 的 println,它导致反转的字符串也被平方。所以,我想重新构造我的问题:当我在我的 main 方法中调用以前的方法时,有没有办法使顺序效果无效?
  • 您能提供输入和预期输出吗?请注意,不要更改您的初始数组,而不是使用两个静态 void 函数,而是让它们返回一个用于打印列表的新数组,这样您就不会更改数组的结构,因为数组是引用类型而不是值类型。
  • 练习 5:设计并实现一个 Java 程序,它定义了如下 4 种方法: int Max(int[] arr) 返回数组中的最大值 int Min(int[] arr) 返回最小值数组中的值 void Reverse(int[] arr) 反转数组 void Squared(int[] arr) 将数组中的每个值更改为 value² 通过在 main() 方法中创建一个长度为 5 的 rand 数组来测试您的方法。您的 main 应该调用每个方法一次,每次调用都使用原始数组作为实际参数。程序中只使用一个数组。所有打印都必须由主来完成。
  • 这是作业说明。输入是随机生成的数字,输出只是人口统计数据。而且我们受限于只允许使用一个初始数组。一切都通过我创建的方法工作,但我试图在我的主要方法中取消订单效果。

标签: java methods main


【解决方案1】:

好的,让我指导您完成您自己的计划。

您正在创建一个随机数数组,到目前为止一切顺利。 然后通过调用Reversed() 反转列表,数组也反转了,也很好。 第三,您通过调用Squared() 对数组的数字进行平方,这也可以。

现在想想,你已经把数组反转了一次,为什么不能用同样的方法再次反转它呢?因为那是用什么方法!它们不仅使您的代码更具可读性,还允许您一遍又一遍地重用同一段代码。

关于这一点,您可以在将平方数组打印到屏幕之前第二次调用 Reversed()

public static void main (String[] args){
    int[] list = new int[5];
    for (int i = 0; i < list.length; i++)
       list[i] = (int) (Math.random() * 1001);

    System.out.println ("The original set is " + Arrays.toString(list) + ".");

    Reversed(list);
    System.out.println ("The reversed array is " + Arrays.toString(list) + ".");    

    Squared(list);
    Reversed( list );
    System.out.println ("The array squared is " + Arrays.toString(list) +       
      ".");
    }

最好的问候。

【讨论】:

  • 感谢您的简单修复!我应该意识到这一点,但大约是凌晨 2 点。我确实有一个问题:有没有办法定义以前的方法,这样当我在 main 中调用它们时它们不会影响后续输出?对于分配,我们必须使用“public static void XXX”作为方法类型,但我不能使用“public static int Rev”并在该方法中创建另一个数组以在 main 中引用吗?
  • 这是我编程的第一个学期,所以我边走边学,哈哈。
  • @BDizzle 是的,有可能。首先,您应该查看原始帖子下 cmets 中链接的问题 Paul Karam。您可以将数组复制到方法中的另一个本地数组,然后颠倒顺序,将其打印到屏幕上,然后退出方法。这样,您的原始数组根本不会受到影响,但您打印了一次数据。仅当您确定不再需要相反的顺序时,这才证明有用。
猜你喜欢
  • 2014-11-29
  • 2021-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多