java 板


LINE

※状况概述: 最近在练习leetcode 的 removeElement 发现使用stream api 和 使用for loop 去指定元素 答案会不一样? 使用steam api 在函数里面有正确改成功 但是 在main 里面就不一样了 有点难以叙述,请直接看code ※程式码: public class LC0027RemoveElement { public static int removeElement(int[] nums, int val) { List<Integer> intList = new ArrayList<Integer>(nums.length); int count=0; int length=nums.length; for (int i : nums){ if(i==val) { count++; } } System.out.println("length: "+nums.length); System.out.println("count: "+count); for (int i : nums){ intList.add(i); } System.out.println("size: " + intList.size() ); intList.removeAll(Arrays.asList(val)); nums = intList.stream().mapToInt(i -> i).toArray(); System.out.println("size: " + intList.size() ); // for(int i=0;i< intList.size();i++) { // nums[i]=intList.get(i); // } System.out.println("nums in function:"+ Arrays.toString(nums) return length-count; } public static void main(String[] args) { int [] nums= { 3, 1, 2, 3, 2 }; int val=3; int answer; answer=removeElement(nums ,val); System.out.println(answer); System.out.println("print nums in main "+ Arrays.toString(num s) } } 结果如下: 注解掉for loop的版本 https://imgur.com/YlOHT1Y 没有注解调for loop的版本 https://imgur.com/mVzZBtl 我的思路是 先将 nums这个阵列里面的值都copy 到 arraylist里面 然後利用arraylist里面的方法将 val 都移除掉 移除完之後再产生 nums = intList.stream().mapToInt(i -> i).toArray(); 问题是 nums在函数里面是有被更改的 为何在main里面没有被更改 ?? 令人疑惑的另外一件事情是 如果将我注解的for loop 拿掉 这样函数里面印出来的 跟 main 里面去印 nums 都会一致 有点搞不太懂理由是为何 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.160.139.177 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1651075806.A.1D6.html ※ 编辑: ntpuisbest (118.160.139.177 台湾), 04/28/2022 00:12:23
1F:→ mikemike1021: 没有注解掉 for-loop 的还有那段 nums = ... map 那04/28 04:57
2F:→ mikemike1021: 段吗? 如果没有的话,那函式内是有改掉的,但只有04/28 04:57
没有注解掉for loop那段的,就没有nums map那段
3F:→ mikemike1021: 改掉前三个值,但 nums 本身长度没有被改04/28 04:57
4F:→ mikemike1021: int [] nums 传进函式的只是阵列位置的,nums = ...04/28 05:04
5F:→ mikemike1021: map 那段把位置换掉而已,并没有更改到外面的,但是04/28 05:04
6F:→ mikemike1021: main nums 指的位置还是原先那块,所以外面的不会04/28 05:04
7F:→ mikemike1021: 变。04/28 05:04
※ 编辑: ntpuisbest (36.227.32.51 台湾), 04/28/2022 08:41:29 但是注解掉 map 没有注解掉for loop版本的 为何函数内的nums跟 main的nums是一致的 就真的有改到nums呢 ※ 编辑: ntpuisbest (36.227.32.51 台湾), 04/28/2022 09:12:12
8F:推 lycantrope: 传入func的是nums位置,nums[i]是将数值放入指定位置04/28 09:19
9F:→ lycantrope: 但map则是产生新的地址命名为nums,原始的nums不会变04/28 09:20
10F:→ ssccg: nums = intList.stream().mapToInt(i -> i).toArray();04/28 12:33
11F:→ ssccg: 是产生新的Array,将reference存到nums这个变数04/28 12:34
12F:→ ssccg: 当然就不是原本nums指到的Array04/28 12:35
13F:→ ssccg: 跟for相等的写法是 IntStream.range(0, intList.size())04/28 12:40
14F:→ ssccg: .forEach(i -> nums[i]=intList.get(i)); 04/28 12:45
15F:→ ssccg: 另外你想做个移除元素的方法,但是阵列长度根本不能改,选 04/28 12:47
16F:→ ssccg: 用这个容器你从很基本的地方就错了04/28 12:48
对,他说要做in place 但是我不会做移除的方法,所以才想说复制到arraylist里面 待会再来贴贴看找到的解答 谢谢 ※ 编辑: ntpuisbest (36.227.32.51 台湾), 04/28/2022 13:55:48 https://i.imgur.com/X7cSRZE.jpg
对,阵列长度根本不能改 所以我发现他的所谓的移除 其实只是把他不要的元素 3 把它取代掉? ※ 编辑: ntpuisbest (101.12.113.5 台湾), 04/28/2022 18:17:41
17F:→ gasbomb: 题目贴上来看看 没头没尾的看不懂你的问题 04/28 23:47
18F:→ gasbomb: 啊 看到了 是leetcode第27题 这题你要做的是把指定的元素 04/28 23:50
19F:→ gasbomb: 移到array的最後 也就是[3,1,2,3,2]变成[1,2,2,3,3]才对04/28 23:53
20F:→ gasbomb: 同学题目不要只看1/4啊 第二段有说不能改阵列长度的语言( 04/29 00:09
21F:→ gasbomb: 就是java)要用交换的 然後第四段有说不能够宣告新的阵列04/29 00:09
其实我的主要问题不是这题怎麽解,而是 标题的叙述,但还是感谢你回答,谢谢~ ※ 编辑: ntpuisbest (101.12.113.5 台湾), 04/29/2022 01:02:06 以前用Api习惯了,非常不擅长array的基本操作qq ※ 编辑: ntpuisbest (101.12.113.5 台湾), 04/29/2022 01:03:14 目前就想说从leetcode explore 一题一题看,虽然平常後端开发很少用到,但总觉得不 能连基本的变数操作都有问题哀qq ※ 编辑: ntpuisbest (101.12.113.5 台湾), 04/29/2022 01:04:29
22F:→ fgh81113: 可能是jdk问题吧 https://imgur.com/oA73a4M 04/30 23:39
23F:→ fgh81113: 这个是没注解的版本 04/30 23:40
24F:→ fgh81113: 你可以用debug模式一步一步看结果阿 04/30 23:42
25F:→ ntpuisbest: 我的jdk好像真的有些问题跟leetcode不一样,不过找不 05/04 10:53
26F:→ ntpuisbest: 太到出在哪哈哈 05/04 10:53







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BuyTogether站内搜寻

TOP