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