![](/img/trans.png)
[英]Java onItemSelectedListener and Spinner not returning Anything
[英]Java sum algorithm not returning anything
我正在嘗試解決Leetcode上的兩個和算法:
給定一個整數數組,返回兩個數字的索引,以便它們加起來成為一個特定的目標。 您可以假定每個輸入都只有一個解決方案,並且您可能不會兩次使用同一元素。
並提出了這一點:
public class Leet {
public static void main(String[] args) {
System.out.println(Arrays.toString(twoSum(new int[]{1, 2, 3, 4, 5, 6}, 2)));
}
public static int[] twoSum(int[] nums, int target) {
int[] answer = null;
int i = 0;
for (int j = nums[i]; i < nums.length; i++) {
for (int x : nums) {
if (x != j & (j + x) == target) {
int x2 = java.util.Arrays.asList(nums).indexOf(x);
answer[0] = i;
answer[1] = x2;
} else {
return nums;
}
}
}
System.out.println("leet method executed");
return answer;
}
}
問題是它沒有返回任何內容,沒有打印的語句。 有任何想法嗎?
我可以看到程序中有2處錯誤或沒有預期的錯誤(拋開它是否是解決問題的最佳方法)。
&&
代替&
。 &
是按位與,對於整數位擺動非常有用。 answer
聲明為數組,但不要為其創建空間。 您需要說int [] answer = new int[2];
或類似。 我沒有運行代碼,但是如果測試程序以無輸出結束,請檢查您是否沒有收到NullPointerException(由上述#2引起)。
不要忘記空檢查和找不到正確的數字對的情況。
public static int[] twoSum(int[] numbers, int target) {
if(Objects.isNull(numbers)){
throw new IllegalArgumentException("numbers is not allowed to be null");
}
for (int a=0;a<numbers.length;a++) {
int first = numbers[a];
for (int b=0;b<numbers.length;b++) {
int second = numbers[b];
if (first + second == target && a!=b) {
return new int[] { first, second };
}
}
}
throw new IllegalArgumentException("there has to be a matching pair");
}
查看一些修復。 記住數組初始化和數組中值可以相同的情況。
public class Solution {
public int[] twoSum(int[] nums, int target) {
int[] answer = null;
for(int i=0;i<nums.length;i++) {
int value = nums[i];
for(int j=i+1;j<nums.length;j++) {
int x=nums[j];
if ((value+x)==target) {
answer = new int[2];
answer[0]=i;
answer[1]=j;
}
}
}
System.out.println("leet method executed");
if (answer == null) {
return nums;
}
return answer;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.