学了这么久我还是不懂java

大四,即将面临毕业失业养家糊口双十一想剁手缺无手可剁的尬尴场面,虽然我知道其实是我太咸鱼。荒废时间罢了。
其实早就想写一些东西记录学习过程了,顺便还可以复习一下,你懂的,懒。
所以现在打算从基础学习Java,有不足之处还请大佬指正。
今天下定决心的原因来自一道leetcode的最简单的一道题:两数之和

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

其实题不是很难,代码如下

public class Solution {
    public int[] twoSum(int[] nums, int target) {
        for (int i = 0; i < nums.length; i++) {
            for (int j = i + 1; j < nums.length; j++) {
                if (nums[j] + nums[i] == target) {
                    return new int[] { i, j };
                }
            }
        }
        throw new IllegalArgumentException("No two sum solution");
    }

解决思路也很简单,遍历每个元素作和就完了,但有一行代码看不懂了
throw new IllegalArgumentException("No two sum solution");
如果没有这一行代码会报错,提示你方法必须返回一个int数组,但是我已经在方法中返回了一个数组,为什么就会报错呢?
先看这个异常吧,方法参数异常,后来想了一下,我返回的数组是在循环里的,一旦这个循环不能执行,或者if条件不满足,当然没有返回值了,所以用到异常来处理这个问题,如果我nums[]只有一个元素或者通通不满足if条件,我就用异常来处理,顺便给出提示信息"No two sum solution"。

然后因为我自己基础不够扎实,还有个小问题:
在一开始的时候,我是这么写的

System.out.println(Arrays.toString(solution.twoSum(int[] nums ={2,3,4},5)));

还有一些错误写法比如说

System.out.println(Arrays.toString(solution.twoSum(int[] nums = {2,3,7}, int target=5)));

这么写是不对的,数组属于引用型变量,当参数是引用型变量时,“传值”传递的是变量中放的“引用”,而不是变量所引用的实体。还有数组的初始化也不能在这里完成。或者说对变量的声明不能放在这里。
测试部分:

public static void main(String[] args) {
        // TODO Auto-generated method stub
        Solution solution=new Solution();
        int[] nums = {2,3,7};
        int target=5;
        System.out.println(Arrays.toString(solution.twoSum(nums, target)));
        
    }

总结
自己的基础还需还加强,好多东西可能都没注意或者忘记了
还是重头来吧。
补一个自学网站http://how2j.cn/(看起来挺全的,具体还没跟着学过)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容