題目
依序遍歷0到100閉區間內所有的正整數,如果該數字能被3整除,則輸出該數字及‘*’標記;如果該數字能被5整除,則輸出該數字及‘#’標記;如果該數字既能被3整除又能被5整除,則輸出該數字及‘*#’標記。
這道看似非常簡單的題目,卻潛藏著幾個玄機。面試官通過這道題,考察學生在語法、語義、語用以及算法優化方面的能力。現實告訴我們,通過這一道題目,就可以淘汰85%的面試者。看似殘酷的考察方式,卻也體現出學生在基礎知識、動手能力到思維能力上的差距。
比較low的寫法:
<code>public class Demo{
\tpublic static void main(String[] args){
\t\tfor(int i=1;i<=100;i++){
\t\t\tif(i%3==0&&i%5==0){
\t\t\t\tSystem.out.println(i+"*#");
\t\t\t\t}else
\t\t\t\tif(i%3==0){
\t\t\t\t\tSystem.out.println(i+"*");
\t\t\t\t\t}else
\t\t\t\t\tif(i%5==0){
\t\t\t\t\tSystem.out.println(i+"#");
\t\t\t\t\t}
\t\t}
\t}
}/<code>
優化後:
<code>public class Demo{
\tpublic static void main(String[] args){
\t\tString result="";
\t\tfor(int i=1;i<=100;i++){
\t\t\tresult=i%3==0?"*":"";
\t\t\tresult+=i%5==0?"#":"";
\t\t\tif(!"".equals(result)){
\t\t\tSystem.out.println(i+result);
\t\t }
\t\t}
\t}
}/<code>
當然頻繁的對字符串操作,我們應該使用Stringbuffer或Stringbuilder
閱讀更多 IT猿猿 的文章