Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 双和返回语句不返回任何内容_Java_For Loop_Return_Conditional Statements - Fatal编程技术网

Java 双和返回语句不返回任何内容

Java 双和返回语句不返回任何内容,java,for-loop,return,conditional-statements,Java,For Loop,Return,Conditional Statements,我试图解决一个问题,我必须在一个数组中添加两个元素来等于一个目标整数值。我认为我的代码是正确的,将返回所需的目标,但是return语句没有返回任何值。这是为什么?我如何修复它 谢谢 public static void main(String[] args) { int[] nums= {2,7,11,15}; int target= 9; } public int twoSum(int[] nums, int target) { int res

我试图解决一个问题,我必须在一个数组中添加两个元素来等于一个目标整数值。我认为我的代码是正确的,将返回所需的目标,但是return语句没有返回任何值。这是为什么?我如何修复它

谢谢

public static void main(String[] args) {
    int[] nums= {2,7,11,15};
    int target= 9;
    
}
    public int twoSum(int[] nums, int target) {
        int result=0; 
        for(int i = 0; i<nums.length ;i++){
            for(int j=i+1; j<nums.length ;j++ ){
                result = nums[i] + nums[j];
                if (result == target){
                  return result;
                }else{
                    break;
                }
            }
        }
    
        
        
    }
}
publicstaticvoidmain(字符串[]args){
int[]nums={2,7,11,15};
int目标=9;
}
公共整数twoSum(整数[]nums,整数目标){
int结果=0;

for(int i=0;i
break
使用错误。此外,您必须
返回结果
。我不确定此代码是否编译。是吗?您也必须调用方法
twoSum(…)
。我看到您的数组已排序,这意味着您实际上可以在
O(n)中解决问题
使用两个指针计时:
,如下所示:

import java.util.Arrays;

class Solution {
    
    // O(n) time, O(1) space
    private static boolean twoNumberSum(int[] array, int sum) {
        if (array.length < 2) {
            return false;
        }
        int left_idx = 0;
        int right_idx = array.length - 1;
        
        // O(n) time, O(1) space
        while (left_idx < right_idx) {
            int currentSum = array[left_idx] + array[right_idx]; 
            if (currentSum < sum) {
                left_idx++;
            }
            else if (currentSum > sum) {
                right_idx--;
            }
            else {
                return true;
            }
        }
        return false;
    }

    public static void main(String ...args) {
        int[] array = {2, 7, 11, 15};
        int valid_sum = 9;
        int invalid_sum = 10;
        
        System.out.format("(%s, %d) -> %b\n", Arrays.toString(array), valid_sum, Solution.twoNumberSum(array, valid_sum));
        System.out.format("(%s, %d) -> %b\n", Arrays.toString(array), invalid_sum, Solution.twoNumberSum(array, invalid_sum));
    }
}
导入java.util.array;
类解决方案{
//O(n)时间,O(1)空间
私有静态布尔twoNumberSum(int[]数组,int和){
if(array.length<2){
返回false;
}
int left_idx=0;
int right_idx=array.length-1;
//O(n)时间,O(1)空间
while(left_idx总和){
右_idx--;
}
否则{
返回true;
}
}
返回false;
}
公共静态void main(字符串…参数){
int[]数组={2,7,11,15};
int-valid_-sum=9;
int无效_和=10;
System.out.format((%s,%d)->%b\n),array.toString(array),valid_sum,Solution.twoNumberSum(array,valid_sum));
System.out.format((%s,%d)->%b\n),Arrays.toString(数组),无效的\u和,Solution.twoNumberSum(数组,无效的\u和));
}
}

另一个对未排序数组有用的解决方案是使用hashset->O(n)时间,O(n)空间。

内部循环(在
j
上的循环)永远不要执行多个迭代:要么返回,要么中断。如果这是您真正想要的,您可以删除循环。如果
结果等于
target
,则返回
似乎不是特别有用:您知道它的值是什么,它与
target
相同。相反,将返回类型设置为
boolean
,因此如果找到,则可以返回true(在循环内);如果没有,则返回false(在循环后)。这甚至不应该编译,因为如果从未进入循环,则不会返回。如果方法已编译(方法末尾缺少
return
),该方法仍然不会返回任何内容,因为该方法从未被调用。感谢您的帮助。我现在正在尝试暴力。一旦我获得当前代码,我将尝试一种更有效的方法:)