Java 将值返回到main方法

Java 将值返回到main方法,java,methods,Java,Methods,好了,这让我的大脑融化了!!代码编译得很好,但拒绝在displayAllResults方法中显示正确答案。我根本不知道如何解决这个问题。我试着将方法私有化,并让它们返回值,而不是无效。例如,sum方法获取数组中元素的和,但不显示它们。我得了0分 //Main public class Lab_4_Practice { public static void main(String[] args) { //Declaring and initializing variables

好了,这让我的大脑融化了!!代码编译得很好,但拒绝在displayAllResults方法中显示正确答案。我根本不知道如何解决这个问题。我试着将方法私有化,并让它们返回值,而不是无效。例如,sum方法获取数组中元素的和,但不显示它们。我得了0分

//Main
public class Lab_4_Practice {

  public static void main(String[] args) {

    //Declaring and initializing variables
    int[] randomArray = new int[10];
    int maxIndex = 0;
    int minIndex = 0;
    int total = 0;
    double average = (total / randomArray.length);  

    //Call Methods
    random(randomArray);
    displayRandom(randomArray);
    largest(maxIndex, randomArray);
    smallest(minIndex, randomArray);
    sum(total, randomArray);
    average(total, randomArray);
    sortArray(randomArray);
    displaySorted(randomArray); 
    displayAllResults(randomArray, maxIndex, minIndex, total, average);      
  }
  //***************************************************
  //Method assigns random values to elements
  public static void random(int[] randomArray) {

    for (int i = 0; i <randomArray.length; i++) {
      randomArray[i] = (int)(Math.random() * 300); 
    } 
  }

  //Method prints random values 
  public static void displayRandom(int[] randomArray) {

    System.out.println("Here are 10 random numbers");
    for (int i = 0; i < randomArray.length; i++) {

      System.out.println(randomArray[i]);
    }
      System.out.println("*************************");
  }

  //Method identifies largest index and its element in array
  public static void largest(int maxIndex, int[] randomArray) {

      for (int l = 1; l < randomArray.length; l++) {
        if (randomArray[l] > randomArray[maxIndex]) {
          maxIndex = l;
        }  
      }  
  }

  //Method identifies smallest index and its element in array
  public static void smallest(int minIndex, int[] randomArray) {


      for (int i = 1; i < randomArray.length; i++) {
        if (randomArray[i] < randomArray[minIndex]) {
          minIndex = i;
        }
      }   
  }

   //Method calculates sum of elements
  public static int sum(int total, int[] randomArray) {


    for (int i = 0; i <randomArray.length; i++) {
      total = total + randomArray[i]; 
    } 
    return total;
  } 

  //Method calculates average of elements
  public static void average(int total, int[] randomArray) {


    for (int i = 0; i < randomArray.length; i++) {
      i += randomArray[i];

    }
  }

  //Method sorts array in ascending order
  public static void sortArray(int[] randomArray) {

    for (int i = 0; i < randomArray.length - 1; i++) {
      int currentMin = randomArray[i];
      int currentMinIndex = i;

      for (int j = i + 1; j < randomArray.length; j++) {
        if (currentMin > randomArray[j]) {
          currentMin = randomArray[j];
          currentMinIndex = j;
        }
      }

      if (currentMinIndex != i) {
        randomArray[currentMinIndex] = randomArray[i];
        randomArray[i] = currentMin;
      }
    } 
  }

  //Method prints array in ascending order  
  public static void displaySorted(int[] randomArray) {

    System.out.println("These are the same numbers sorted in ascending order");
    for (int i = 0; i < randomArray.length; i++) {
      System.out.println(randomArray[i] + " ");
    }
      System.out.println("*************************");
  }

  //Method prints results of largest smallest sum and average
  public static void displayAllResults(int[] randomArray, int maxIndex, int minIndex, int total, double average) {

    System.out.println("The largest index is " + maxIndex + " and its value is " + randomArray[maxIndex]);
    System.out.println("The smallest index is " + minIndex + " and its value is " + randomArray[minIndex]);
    System.out.println("The sum of the elements is " + total);
    System.out.println("The average of the elements is " + average);

  }
}

传递给每个方法的变量都是零。您需要在main方法中更改这些变量,因为方法中的变量仅在各自的方法中使用和修改,即使它们是从main方法传递给该方法的。看起来这就是你想要的:

randomArray = random(randomArray);
displayRandom(randomArray);
maxIndex = largest(maxIndex, randomArray);
minIndex = smallest(minIndex, randomArray);
total = sum(total, randomArray);
average(total, randomArray); //not sure what you're trying to do here; this method does not calculate the average
average = total/randomArray.length; //you probably just want to use this instead of the average() method
randomArray = sortArray(randomArray);
displaySorted(randomArray); 
displayAllResults(randomArray, maxIndex, minIndex, total, average);

此外,对于每个应该返回值的方法,您需要将方法头中的返回类型从void更改为适当的变量类型,以及在每个方法的末尾添加一个return语句。

始终建议您在不同的类中执行所有计算/操作,而不是在主类中执行。创建一个不同的类,并在代码中创建如下内容-

public class Example{
public void assign(int[] Array){
    for(int i=0;i<Array.length;i++){
        Array[i]=(int)(Math.random()*300);
    }
}

public void display(int[] Array){
    System.out.println("The 10 elements of the array are:");
    for(int i=0;i<Array.length;i++){
        System.out.println(Array[i]);
    }
}

public int sum(int[] Array) {
    int total =0;
    for(int i=0;i<Array.length;i++){
        total=total+Array[i];
    }
    return total;
}
//write all other methods here in this class.
}
public static void main(String[] args) {
    int[] randomArray=new int[10];
    Example e=new Example();
    e.assign(randomArray);//this must be called first to assign the values inside the array.
    e.display(randomArray);//call this method if you wish to display the values.
    System.out.println("The sum of the elements are: "+e.sum(randomArray));
}

我对你的代码做了一些小改动。您可以将其与旧代码进行比较。由于局部变量,您面临的大多数问题都是局部变量。无论您向相应的方法提供了什么,操作后对局部变量所做的更改都不会影响您的实例变量。对于最大和较小的方法,您调用它时没有对数组进行排序,因为它给出了错误的输出

公共类堆栈问题{ 公共静态无效字符串[]args{

    // Declaring and initializing variables
    int[] randomArray = new int[10];
    int maxIndex = 0;
    int minIndex = 0;
    int total = 0;
    double average = 0;

    // Call Methods
    random(randomArray);
    displayRandom(randomArray);
    sortArray(randomArray);

    maxIndex=largest(randomArray);
    minIndex=smallest(randomArray);

    total=sum(randomArray);
    average=average(total, randomArray);

    displaySorted(randomArray);
    displayAllResults(randomArray, maxIndex, minIndex, total, average);
}

// ***************************************************
// Method assigns random values to elements
public static void random(int[] randomArray) {

    for (int i = 0; i < randomArray.length; i++) {
        randomArray[i] = (int) (Math.random() * 300);
    }
}

// Method prints random values
public static void displayRandom(int[] randomArray) {

    System.out.println("Here are 10 random numbers");
    for (int i = 0; i < randomArray.length; i++) {

        System.out.println(randomArray[i]);
    }
    System.out.println("*************************");
}

// Method identifies largest index and its element in array
public static int largest(int[] randomArray) {
    int maxIndex=0;
    for (int l = 0; l < randomArray.length; l++) {
        if (randomArray[l] > randomArray[maxIndex]) {
            maxIndex = l;
        }
    }
    return maxIndex;
}

// Method identifies smallest index and its element in array
public static int smallest(int[] randomArray) {
    int minIndex=0;
    for (int i = 0; i < randomArray.length; i++) {
        if (randomArray[i] < randomArray[minIndex]) {
            minIndex = i;
        }
    }
    return minIndex;
}

// Method calculates sum of elements
public static int sum(int[] randomArray) {
    int localTotal=0;
    for (int i = 0; i < randomArray.length; i++) {
        localTotal+=randomArray[i];
    }
    return localTotal;
}

// Method calculates average of elements
public static int average(int total, int[] randomArray) {

    return total/randomArray.length;
}

// Method sorts array in ascending order
public static void sortArray(int[] randomArray) {

    for (int i = 0; i < randomArray.length - 1; i++) {
        int currentMin = randomArray[i];
        int currentMinIndex = i;

        for (int j = i + 1; j < randomArray.length; j++) {
            if (currentMin > randomArray[j]) {
                currentMin = randomArray[j];
                currentMinIndex = j;
            }
        }

        if (currentMinIndex != i) {
            randomArray[currentMinIndex] = randomArray[i];
            randomArray[i] = currentMin;
        }
    }
}

// Method prints array in ascending order
public static void displaySorted(int[] randomArray) {

    System.out.println("These are the same numbers sorted in ascending order");
    for (int i = 0; i < randomArray.length; i++) {
        System.out.println(randomArray[i] + " ");
    }
    System.out.println("*************************");
}

// Method prints results of largest smallest sum and average
public static void displayAllResults(int[] randomArray, int maxIndex, int minIndex, int total, double average) {

    System.out.println("The largest index is " + maxIndex + " and its value is " + randomArray[maxIndex]);
    System.out.println("The smallest index is " + minIndex + " and its value is " + randomArray[minIndex]);
    System.out.println("The sum of the elements is " + total);
    System.out.println("The average of the elements is " + average);

}

[没有人支持我的动议,因为[重复]——所以我觉得有必要在这里写一个答案。]

这是从数组元素计算某些值的方法的典型模式:

public static int largest(int[] array) {
    int maxIndex = 0;
    for (int l = 1; l < array.length; l++) {
        if (array[l] > array[maxIndex]) {
            maxIndex = l;
        }  
    }
    return maxIndex;
}
类型为int、long、double、char、short、float、boolean的参数按值复制,即调用中的对应表达式(实际参数)将被计算,结果存储在一个带有参数名称的变量中。此变量的寿命很短:当您从方法调用返回时,它就消失了通过在非void方法中使用返回机制来返回值

但是,如果你有一个数组,事情就有点不同了。数组是一个对象,对象是通过引用来处理的,这些值告诉计算机在哪里可以找到对象。这个引用也会从调用点复制并存储在一个短期变量中,但你仍然可以访问它引用的对象,以便进行更改通过方法中的代码(以对象引用为参数),可以对数组或任何对象进行排序

最后,计算平均值的代码有很大的错误

public static double average( int[] array ) {
    return (double)sum( array )/array.length;
}

您需要一个double类型的变量来保存结果。数组的长度可能为0,所以我有点粗心。您知道为什么吗?

reference和参数int-minIndex的可能副本无法返回值-它是方法的单向票证。-使用int-methods和return返回value,并确保存储返回值-您不需要使用sum。它总是被推荐的…需要引用!我是说最好创建一个不同的类并在其中定义所有方法。我理解您的意思。我是说您对代码结构的看法可能很普遍,但肯定不是通用的。Ev更多的OO将是使数组成为类的字段,而不是使用大量不访问字段的正确方法。大多数代码检查器都会向您发出警告,因此您关于如何使用类的想法不是主流。是的,我同意您@laune的观点。这只是我构建代码的方式。不要混淆OP。没有必要重新尝试urn是一个数组,因为它是一个对象。不必只为计算返回的结果而将int变量传递给一个方法-为什么要让调用方负担这个?
public static double average( int[] array ) {
    return (double)sum( array )/array.length;
}