亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

leetcode 編譯器不像 eclipse 那樣工作

leetcode 編譯器不像 eclipse 那樣工作

MMMHUHU 2022-07-27 20:43:56
我嘗試 使用 Java解決https://leetcode.com/problems/maximum-subarray/submissions/我通常在在線提交之前使用 Eclipse 嘗試這些事情。在這里,我在 Eclipse 中附加了代碼public class PrintAnnotationExample{public static void main(String[] args) {    int index = 0;    int max =0;    int temp = 0;    int[] test = new int[] {-2,1,-3,4,-1,2,1,-5,4};    while(index<test.length) {        temp+= test[index];        if(temp <0) {            while(index<test.length-1 && test[index]<0) {                ++index;            }            temp = 0;        }        max = (max >= temp ) ? max : temp;        ++index;    }    ///    System.out.println(max); }}有效!預期的輸出是 6,它也是 6。但是,在 Leetcode 提交頁面中,它不起作用class Solution {public int index = 0;public int max =0;public int temp = 0;public int maxSubArray(int[] nums) {    while(index<nums.length) {//?? ???? ?? ????        temp+=  nums[index];        if(temp <0) {            while(index<nums.length-1 && nums[index]<0) {                ++index;            }            temp = 0;        }        max = (max >= temp ) ? max : temp;        ++index;    }    return max;}它向我顯示 1,而不是 6...很奇怪,可能是我對 Java 語義有什么誤解。
查看完整描述

1 回答

?
手掌心

TA貢獻1942條經驗 獲得超3個贊

您在 Eclipse 和 Leetcode 中執行的代碼明顯不同,因此您需要關注它們之間的差異……而不是(錯誤地)斷定存在編譯器/語言差異。

區別之一是在 Eclipse 版本index中,maxtemp是局部變量。在 Leetcode 版本中,它們是實例變量,不會在每次調用方法時都被初始化。如果 LeetCode 一次實例化你的類并多次調用該方法,這將導致不正確的行為。


可能是我對 Java 語義有什么誤解。

也許?;蛘哌@可能只是一個錯誤。

但無論哪種方式,都不建議使用實例變量來保存方法調用的狀態。使用局部變量代替:

  • 為此使用局部變量可以避免您犯的錯誤;即忘記重新初始化。

  • 為此使用實例變量使方法不可重入;即對方法的并發或重疊調用將相互干擾。如果方法被遞歸調用,或者從多個線程調用,這將是有問題的。


查看完整回答
反對 回復 2022-07-27
  • 1 回答
  • 0 關注
  • 129 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號