[英]Returning a single int from int[] method in java
我正在嘗試創建一個方法“差異”,該方法在 int 數組中查找最大數並將 int 返回給 main 方法。 我收到一條錯誤消息,告訴我我無法將 int 數組轉換為 int。 我怎樣才能使這項工作? 我不想返回整個數組。 非常感謝
public class bigDiff{
public static void main(String[] args){
int[] arr = new int[] {7, 6, 8, 9};
difference(arr);
}
public static int difference (int[] input){
int smallest = input[0];
int largest = input[0];
for (int i = 0; i < input.length; i++){
if(input[i] >= largest){
largest = input[i];
} else if(input[i] <= input[largest]){
smallest = input[i];
}
}
return largest;
}
}
看這行代碼
else if(input[i] <= input[largest]){
smallest = input[i];
}
input[largest]
,第一次最大值是 7 表示 input[7],你的數組大小只有 4.so 這不起作用。
input[largest]
改為使用input[i]
。
我將嘗試解釋一些事情:
首先,你對數組的聲明很奇怪,你應該聲明: int[] arr = {7, 6, 8, 9};
其次, difference
函數返回一個整數,你用它做什么? 沒什么.. 嘗試打印它.. System.out.println(difference(arr));
第三,你想得到最大的數字,為什么你需要最小的數字? 甚至編譯器也會警告您未使用的變量。 所以你的difference
函數應該是這樣的:
int largest = input[0];
for (int i = 0; i < input.length; i++){
if(input[i] > largest)
largest = input[i];
}
return largest;
** 如果input[i] == largest
,則不需要執行任何操作,因此檢查if(input[i] > largest)
就足夠了。
祝你好運 :)
您已經聲明了一個數組,即int[] arr = new int[] {7, 6, 8, 9}
這個數組的長度是 4 但在差異函數中,
for (int i = 0; i < input.length; i++){
if(input[i] >= largest){
largest = input[i];
} else if(input[i] <= input[largest]){
smallest = input[i];
}
}
當您在else if(input[i] <= input[largest]) 中進行比較時,它將產生錯誤,因為在第一次迭代中最大 = 7並且在下一次迭代中它將進入 else if where input[1]<= input[7]被檢查,因此將生成數組越界異常。
我認為您想獲得數組中的最大元素,因此您可以縮短數組並輕松訪問最大元素,而不是這樣做。
問題:
1. largest
用作索引(即input[largest]
),如果largest
大於數組長度可能會導致ArrayOutOfBoundsException
2. largest
用於if
設置smallest
3. difference
返回largest
元素而不是largest
和smallest
元素之間的差異
4. 不使用difference
返回值(不是真正的問題,但您看不到difference
的輸出)
否則,以下(修改后的)程序有效:
public class bigDiff{
public static void main(String[] args){
int[] arr = new int[] {7, 6, 8, 9};
System.out.println(difference(arr)); // problem 4 was here
}
public static int difference (int[] input){
int smallest = input[0];
int largest = input[0];
for (int i = 0; i < input.length; i++){
if(input[i] >= largest){
largest = input[i];
} else if(input[i] <= smallest){ // problems 1 and 2 were here
smallest = input[i];
}
}
return largest - smallest; // problem 3 was here
}
}
這應該可以正常工作:
public static int difference (int[] input){
int smallest = input[0];
int largest = input[0];
for (int i = 0; i < input.length; i++){
if(input[i] > largest){
largest = input[i];
} else if(input[i] < smallest){
smallest = input[i];
}
}
return largest;
}
當您只對最大值感興趣時,保留最小值也沒有意義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.