被百度,網易,騰訊技術筆試在線編程題輸入輸出坑了的我提醒大家注意這些!!!(不看這些就算leetcode,劍指offer刷了再多也沒有,嗚嗚嗚嗚!!!)

被技術筆試在線編程題輸入輸出坑了的我,警醒大家注意這些!!!!!!(被百度,網易,騰訊筆試輸入輸出坑了的我提醒大家注意這些)

你是否還在爲在線編程題輸入輸出而煩惱?

你是否還在爲本地編譯器通過而在線編程題總是無法通過而煩惱?

你是否還在爲明明刷了很多算法題筆試成績還是不理想而煩惱?

來這裏就對啦!!!!!!!!!

我真的是被坑了若干次,感覺失去了好多機會啊,嗚嗚嗚嗚!!!!!

 

本人小白,目前已經刷了劍指offer的所有題目67道題,然後leetcode上也已經刷了240道題,雖然還比不上某些大佬,但覺得自己算法應該也還行了吧,筆試那不是輕鬆加愉快啊!!!!!可是,事實讓我很失望。

百度筆試掛了,網易筆試掛了,騰訊筆試掛了,阿里筆試掛了(其實阿里不是因爲輸入輸出啦,真的是題目有點難,還是自己的能力不足啊,啊啊啊啊啊),真的是很難受,總是出現下面的問題:

不通過

您的代碼已保存
請檢查是否存在數組越界等非法訪問情況
case通過率爲0.00%

數組越界,數組越界,這個問題當初弄得我真的是,心態崩了,調一個簡單的題調不出來,後面的題由於心態崩了,也做不出來,最後導致筆試掛了。

出現數組越界等非法訪問這個問題很可能就是你的輸入輸出寫錯了,不信的話,你可以把你的邏輯代碼都註釋掉,如果還是出現這個問題的話,就一定是輸入輸出寫錯了,而你又發現不了(如果註釋掉就沒有了,那可能還真是裏面數組越界了,哈哈哈,那可能就具體問題具體分析了,當然這也是一種調試代碼的方式,註釋代碼來定位出現問題的地方)

廢話了這麼多,下面來講一下輸入輸出的寫法吧,先來一段示例代碼。

// 本題爲考試單行多行輸入輸出規範示例,無需提交,不計分。
import java.util.*;
public class Main {
    public static void main(String[] args) {
        //第一句就是從控制檯來獲取內容,這一句都會有,大概知道意思就可以了
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {// 注意,如果輸入是多個測試用例,請通過while循環處理多個測試用例
            String N=in.nextLine();
        }
    }
}

獲取裏面的數據,有如下若干個方法:

(1)讀一個整數
 int n = sc.nextInt(); 
(2)讀一個字符串
String s = sc.next(); 
(3)讀一個浮點數
double t = sc.nextDouble(); 
(4)讀一整行
 String s = sc.nextLine(); 
(5)判斷是否有下一個輸入
sc.hasNext()
sc.hasNextInt()
sc.hasNextDouble()
sc.hasNextLine() 
(6)輸出
System.out.print(); 
System.out.println(); 
System.out.format();
System.out.printf();

方法的話其實也就是上面那麼幾個,看起來真的很簡單,但是如果不做一下真題還真不知道里面的一些小坑。

 

我遇到的第一個坑,nextInt()與nextLine()互換使用的坑

這裏我們來一道題來試一下:https://www.nowcoder.com/practice/fc72d3493d7e4be883e931d507352a4a?tpId=98&tqId=32827&tPage=1&rp=1&ru=/ta/2019test&qru=/ta/2019test/question-ranking

下面是我第一版寫得代碼,不難,讀者可以試着看一看問題出在哪裏,自己找一找,可能印象會更深

// 本題爲考試單行多行輸入輸出規範示例,無需提交,不計分。
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {// 注意,如果輸入是多個測試用例,請通過while循環處理多個測試用例
            int N=in.nextInt();
            String string=in.nextLine();
            //0N,1E,2S,3W
            int count=0;
            char[] ch=string.toCharArray();
            for(int i=0;i<ch.length;i++)
            {
                if(ch[i]=='L')
                {
                    count--;
                    if(count==-1)
                    {
                        count=3;
                    }
                }if(ch[i]=='R')
                {
                    count++;
                    if(count==4)
                    {
                        count=0;
                    }
                }
            }
            if(count==0)
            {
                System.out.println("N");
            }else if(count==1)
            {
                System.out.println("E");
            }else if(count==2)
            {
                System.out.println("S");
            }else
            {
                System.out.println("W");
            }
        }
    }
}

揭曉答案:

問題出在int N=in.nextInt();
            String string=in.nextLine();

這兩句上,總是出現數組索引越界異常,問題就是第一句獲取的是int,那麼下一句再獲取的nextLine其實獲取的是這一行後面的內容,而不是下一行的內容,那麼我們來測試一下:

// 本題爲考試單行多行輸入輸出規範示例,無需提交,不計分。
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int a=in.nextInt();
        String string=in.nextLine();
        System.out.println(string);
    }
}

輸出

我僅僅輸入一個2它就停止了,我還沒輸入其他內容呢,說明nextline()獲取的就是它後面的那個內容啦,也就是空的內容。

這個問題是我被坑的最慘的一個問題了!!!!

解決方案:

最簡單的就是空寫一個nextline,或者前面的nextInt,直接用nextLine(),然後再字符串轉int

 

我遇到的第二個坑,題目要求輸入的範圍其實是Long,但是我卻輸入的int導致數組越界異常,最開始的時候真的找了好久都沒找到啊,讀者可能會問到,這個問題很簡單啊,怎麼會出錯,其實這個地方出錯的原因是題目的表達上,題目表達的數據範圍是10的18次方,開始刷題的時候沒有注意,天真的以爲2的32次方就是10的18次方,筆試的時候也沒有計算器,因爲平時記住的都是2的32次方,然後就怎麼調也調不出來,其實2的32次方是10的9次方以下左右的可以用int,超過這些,就想一想是否要用更大的數據類型了。

 

我遇到的第三個坑,其實還是字符串和int的問題,題目輸入是這樣的

5

010101

011010

101101

第一行是一個int類型的數,用nextInt方法毋庸置疑,我在弄下面幾行的時候,誤以爲它是數,中間有空格,然後就一直用nextInt方法了,導致出錯,其實下面都是一個一個字符串,可以用nextLine方法,然後再toCharArray

 

這三個就是我從最開始筆試,到現在遇到的坑,開始的時候還不知道哪裏錯了,總是提示

數據越界,而且通過總是0

真的很煩

希望這篇文章可以幫到你,你還遇到過什麼在線編程筆試的坑?歡迎留言!

 

關注微信公衆號,獲取更多java軟件開發學習資源,覆蓋java基礎,android,網絡編程,併發編程,mysql,linux,算法,以及C++和python書籍資源。

掃描下方二維碼,或者搜索公衆號你還有頭髮嗎

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章