程式題目練習:怎麼判斷質數?如何把觀念應用到題目,用程式解決問題?文組生的自學程式之路|芽芽的程式之旅

閱讀時間約 8 分鐘

從跟著教學影片把老師的程式抄過一遍,變成看到題目能把題目轉為程式,對於初學者來說蠻困難的。所以我想以初學者的角度來分享自己怎麼適應這段轉換的過程,以及我解題的方法是什麼。(也順便紀錄一下自己的思路)

  • 主題:流程控制為主的綜合小應用
  • 題目:讓使用者輸入一個數字,並用程式判斷該數字是否質數。提示:使用迴圈與 % 運算子。(題目來源:彭彭老師的課程
raw-image

解決問題的流程

剛開始的時候我其實也不知道怎麼解題,跟工程師男友聊天時他提到,在收到PM提供的需求後,他會先去找出題目的關鍵字、思考要怎麼寫、最後才是開始動手寫程式

這個過程其實跟平常工作中接到任何任務的時候一樣,先確認主管的目標、目的、需求、條件、時間、資源等等,先簡單規劃自己要怎麼做,才開始實際執行。

簡單來說解題的步驟就是:

  1. 拆解題目
  2. 規劃程式架構(開頭寫什麼、中間寫什麼、最後會寫什麼)
  3. 動手嘗試
  4. 反覆修正
  5. 完成

• • •

拆解題目

以這題來說,題目中的關鍵字為「輸入」、「是否」、「質數」。很難以解釋我是怎麼抓出關鍵字的,但據我觀察關鍵字不外乎是動詞、名詞、或Yes or No,大家可以試著從這部份著手。

找出關鍵字後,就可以找出需要用到的工具,比如:

  • 輸入→標準輸入
  • 是否→需要用到判斷式或是迴圈
  • 質數→有點印象,像是2、3、11這種是質數,但具體定義我講不出來,需要用Google搜尋
  • 質數的定義→%餘數運算子。因為Google說質數是指在大於1的自然數中,除了1和該數自身外,無法被其他自然數整除的數(也可定義為只有1與該數本身兩個正因數的數)。而這句話的重點在於「整除」,整除代表沒有餘數,所以可以用%運算子。

• • •

規劃程式架構

在拆解完題目後,我就來翻我的筆記(因為對於語法還不熟,沒有直接背起來),思考我的程式寫出來可能會長什麼樣。

開頭要有標準輸入,所以第一行會是:

import java.util.Scanner;

接著就可以接Java需要寫的兩行程式碼:

public class 檔名{
public static void main (String[ ]args){
}
}

中間要讓使用者輸入,所以要先寫出標準輸入的語法:

Scanner s=new Scanner(System.in);
//s是變數,名稱可以自己定義,你要叫s1、s2、s3......都可以​
int x=s.nextInt();
//如果要定義輸入的是字串,就定義String text=s.next();
s.close();
//使用完畢後需要關閉Scanner

最後再開始寫怎麼判斷是不是質數的程式碼。

• • •

動手嘗試及反覆修正

寫程式一定是寫寫改改的,即使很厲害的軟體工程師,在他們順順寫完Code之後,還是會進行檢查和修正,以工程師的術語來說就是「try and error」。

目前針對這個題目,我把我的寫法放在下一段~

• • •

參考寫法

第一版

可以運作,但是使用者輸入指令不明確,如果今天使用者輸入Hello,或是輸入一個超過Int範圍的數字,這個程式就死掉了,所以不能假設使用者輸入整數。(要把使用者想得很笨很笨)

import java.util.Scanner; 
public class Exerciseloop1{
    public static void main(String[]args){
        Scanner s=new Scanner(System.in);
        System.out.println("請輸入一個整數");
        String text=s.next();

        int x=Integer.parseInt(text);
        int i=1;
        int counter=0;
        //counter代表因數的數量
       
        while(x>=i){
            if(x%i==0){
             counter=counter+1;
            i+=1;
            }else if(x%i!=0){
                i+=1;
            }
         }
        if(counter==2){
            System.out.println("這個數字是質數");  
         } else{
            System.out.println("這個數字不是質數");
         }  
        s.close();
        }      
  }      

於是爬文後,我找到了一個判斷字處是不是整數的工具。不過中間卡了很久,因為不知道要怎麼套進來、程式要放在哪一排比較好、原本的程式碼要怎麼調整。(所以雖然網路上都有寫好的東西可以抄,但是要抄得正確,就跟考試作弊一樣也是一種技術?)

• • •

第二版

奮鬥很久後產出這個版本,大致算成功。

import java.util.Scanner; 
public class Exerciseloop{
    public static void main(String[]args){
        Scanner s1=new Scanner(System.in);
        System.out.println("我是質數判斷機,請輸入一個整數");
        String text1=s1.next();
        boolean integertext1ornot=text1.matches("-?\\d+");
       
        while(integertext1ornot==true){
          int x=Integer.parseInt(text1);
          int i=1;
          int counter=0;
          //counter代表因數的數量

          //能不能整除,用%運算子
          while(x>=i){
            if(x%i==0){
             counter=counter+1;
            i+=1;
            }else if(x%i!=0){
                i+=1;
            }
         }

         if(counter==2){
            System.out.println("這個數字是質數");  
            break;
         } else{
            System.out.println("這個數字不是質數");
            break;
         }  
        }
       
        //輸入的字串不是整數的時候
        while(integertext1ornot==false){
            System.out.println("輸入錯誤,判斷失敗");  
            break;
        }
        s1.close();      
  }
}        

美中不足的就是使用者只能輸入一次資料,電腦會判斷是質數/不是質數/輸入錯誤,然而當使用者輸入錯誤,想再重新輸入,我就要重新按一次run,讓程式重頭開始跑,不能直接跳出請重新輸入。這個地方也讓我卡了很久,但目前還是沒研究成功。(總之這版目前好歹還算是個能跑的程式。)

心得

雖然覺得自己很笨,花了五個小時才解決一題,但至少可以勉強寫出個東西來,挺感動的!過程中對於原本學的while、if、標準輸入、資料型態、字串轉換成整數這幾個工具用的稍微熟練 一些,也自己學了字串判斷整數的語法。

事實證明笨鳥慢飛,只要你願意花時間投入、願意耐住性子爬文找解法(成為工程師必備)、再加上身邊有人能給你指點(這個就不是必須了,但絕對是加分),每個人都有機會學會怎麼寫程式!

• • •

如果你喜歡芽芽的分享、想知道更多的職場乾貨、或想聽聽芽芽發發牢騷,

歡迎留言、按愛心、收藏、追蹤、以及贊助芽芽,給芽芽一點點的鼓勵:)

• • •

繼續閱讀👉文組生的自學程式之路:為什麼選擇Java、哪裡有Java教學、怎麼學Java|芽芽的程式之旅

「專案管理」已經是現代人的必修課,在工作中你可能是專案經理,或專案團隊的一員,學習專案管理能讓你的工作更加順遂;而在人生中,很多事情背後的本質也是專案,了解專案管理的概念,則能夠讓你對於自己人生有更多的主動權。這一系列,芽芽把專案管理的精華,濃縮成五分中可以讀完的篇幅,希望能把專案管理的知識,用更簡單的方式分享給大家。
留言0
查看全部
發表第一個留言支持創作者!
網路上提到自學程式的文章,都會說自學程式非常地辛苦,而且要很自律,決心夠強;而當自己踏上這條路後,才發現何止是辛苦,根本是佈滿荊棘,常常寸步難行,且被刺地遍體鱗傷(喂~是不是有點太浮誇了),但在每個寫出程式豁然開朗的當下,卻又成就感滿滿,所以想藉著寫部落格紀錄一下自己的學習過程!
網路上提到自學程式的文章,都會說自學程式非常地辛苦,而且要很自律,決心夠強;而當自己踏上這條路後,才發現何止是辛苦,根本是佈滿荊棘,常常寸步難行,且被刺地遍體鱗傷(喂~是不是有點太浮誇了),但在每個寫出程式豁然開朗的當下,卻又成就感滿滿,所以想藉著寫部落格紀錄一下自己的學習過程!
你可能也想看
Thumbnail
「設計不僅僅是外觀和感覺。設計是其運作的方式。」 — Steve Jobs 身為一個獨立文案,許多人會以為我們的生活只需要面對電腦,從無到有,用精巧的文字填滿空白的螢幕,呈現心目中獨具風格的作品。 ——有的時候可以如此,但其實這是我們夢寐以求的偶發日常。 更多的時候,白天的工作時間總被各種繁雜
Thumbnail
接上篇,我們去聽心靈導師的講座,法師的講座,同時也要有九種心來接受這些善知識的開導,如果無法達到這九種心獲取善知識的開導,不管是心靈導師,還是法師,仍然無法對你在生活上做任何煩惱的改變。現在就來談談煩惱由何起?如何捨煩惱?提升自己生活上的快樂之源。 華嚴經上說:以九種心親近承事諸善知識,能攝一切親近
Thumbnail
「於法法師發起承事者如地藏經云:專信恭敬聽聞法不應彼起毀謗,於說法師供養者謂於師起如佛想,應視如佛……不應作意法師五處離高舉者,應時時聽聞發起恭敬,發起承事,不應忿恚,隨順正行,不求過失,由此六事聽聞之……又本生論「處極低劣座發起調伏德,以具笑目視,如飲甘露雨起敬專至誠,善淨無垢意,如病聽醫言,起承
Thumbnail
呈上篇繼五想聽聞之後,由五處六事聽聞正法行之,避免自己犯錯。對於師父的錄音聽了好幾遍才懂一點點,寫一點點,真的很難。主要還是思惟。法師教我們要尋找更動自己的角度去看待事情,然後放下自己的心性。 「於法法師發起承事者如地藏經云:專信恭敬聽聞法不應彼起毀謗,於說法師供養者謂於師起如佛想,應視如佛……不應
教育部的大綱領明擺著四個字「適性揚才」,究竟有多少從事教育者能夠很清楚的了解,當教育者無法明瞭時,又如何讓學子們創造自己的技能生存下來。   商業週刊有一期刊載:【消失的西海岸】為了三接天然氣站,又有海岸藻礁的生態,所以我很認真的給他看下去這一篇報導。裡面的寫的屬不屬實都不是我要講的話,我想說的是這
Thumbnail
整個白皮書給人的感覺像一個有著華麗外表的晚宴,餐點卻比路邊攤差,四百多個外國專家在2017年底專程為台北想了一些計畫,也有市長和政府的同意和配合,寫出來的東西和實行上的成效都給人一種繞圈子的無限輪迴感。
Thumbnail
不只有台灣在推動循環城市零垃圾的環節,世界各地已有許多成功的案例,從小村子到大城市,讓我們來看看別人怎麼做吧!一起探討他們的利弊和套用到台北市的可行性。
Thumbnail
我們所在的寶島,福爾摩沙,擁有充足的降水,梅雨、鋒面雨、颱風都是我們常見的降水來源,它們充沛了我們的河川,滋潤了全台灣的水庫,是水資源的重要來源,但儘管平均年降雨量高達2500毫米(是世界平均年雨量的三倍多)缺水仍是我們經常遇到的問題!為什麼呢?
Thumbnail
可食地景生態復育是白皮書中的一環,在筆者腦海中蹦出的畫面,是科幻電影的地下菜園、高科技燈照,或是屋頂一片綠油油。但現實並非如此,白皮書中以推廣城市田園發展都市農耕為主,透過結合現有的基地,擴大城市耕種面積。 田園城市推廣計畫之願景—「打造臺北市為一個綠色健康、教育、生活之田園城市」。
Thumbnail
 白皮書中的八個方向包括水資源循環再利用、再生能源整合優化、可食地景生態復育、資源回收多方運用...。接下來的專題要深入研究資源回收多方運用、可實地景生態復運和水資源循環再利用,這篇要探討資源回收在循環城市的角色,其中創造城市廢棄物的新價值是它的口號,期望一天能達到零垃圾台北的創舉。
Thumbnail
 現今,我們不再是一味的像抽血般將資源從大地下汲取出來,更不是不顧一切的像工業革命時代拼命生產,反倒開始注重了生活品質,生產效率還有我們的行為對未來世代的影響加上技術的進步,循環城市這個想法誕生了...
Thumbnail
「設計不僅僅是外觀和感覺。設計是其運作的方式。」 — Steve Jobs 身為一個獨立文案,許多人會以為我們的生活只需要面對電腦,從無到有,用精巧的文字填滿空白的螢幕,呈現心目中獨具風格的作品。 ——有的時候可以如此,但其實這是我們夢寐以求的偶發日常。 更多的時候,白天的工作時間總被各種繁雜
Thumbnail
接上篇,我們去聽心靈導師的講座,法師的講座,同時也要有九種心來接受這些善知識的開導,如果無法達到這九種心獲取善知識的開導,不管是心靈導師,還是法師,仍然無法對你在生活上做任何煩惱的改變。現在就來談談煩惱由何起?如何捨煩惱?提升自己生活上的快樂之源。 華嚴經上說:以九種心親近承事諸善知識,能攝一切親近
Thumbnail
「於法法師發起承事者如地藏經云:專信恭敬聽聞法不應彼起毀謗,於說法師供養者謂於師起如佛想,應視如佛……不應作意法師五處離高舉者,應時時聽聞發起恭敬,發起承事,不應忿恚,隨順正行,不求過失,由此六事聽聞之……又本生論「處極低劣座發起調伏德,以具笑目視,如飲甘露雨起敬專至誠,善淨無垢意,如病聽醫言,起承
Thumbnail
呈上篇繼五想聽聞之後,由五處六事聽聞正法行之,避免自己犯錯。對於師父的錄音聽了好幾遍才懂一點點,寫一點點,真的很難。主要還是思惟。法師教我們要尋找更動自己的角度去看待事情,然後放下自己的心性。 「於法法師發起承事者如地藏經云:專信恭敬聽聞法不應彼起毀謗,於說法師供養者謂於師起如佛想,應視如佛……不應
教育部的大綱領明擺著四個字「適性揚才」,究竟有多少從事教育者能夠很清楚的了解,當教育者無法明瞭時,又如何讓學子們創造自己的技能生存下來。   商業週刊有一期刊載:【消失的西海岸】為了三接天然氣站,又有海岸藻礁的生態,所以我很認真的給他看下去這一篇報導。裡面的寫的屬不屬實都不是我要講的話,我想說的是這
Thumbnail
整個白皮書給人的感覺像一個有著華麗外表的晚宴,餐點卻比路邊攤差,四百多個外國專家在2017年底專程為台北想了一些計畫,也有市長和政府的同意和配合,寫出來的東西和實行上的成效都給人一種繞圈子的無限輪迴感。
Thumbnail
不只有台灣在推動循環城市零垃圾的環節,世界各地已有許多成功的案例,從小村子到大城市,讓我們來看看別人怎麼做吧!一起探討他們的利弊和套用到台北市的可行性。
Thumbnail
我們所在的寶島,福爾摩沙,擁有充足的降水,梅雨、鋒面雨、颱風都是我們常見的降水來源,它們充沛了我們的河川,滋潤了全台灣的水庫,是水資源的重要來源,但儘管平均年降雨量高達2500毫米(是世界平均年雨量的三倍多)缺水仍是我們經常遇到的問題!為什麼呢?
Thumbnail
可食地景生態復育是白皮書中的一環,在筆者腦海中蹦出的畫面,是科幻電影的地下菜園、高科技燈照,或是屋頂一片綠油油。但現實並非如此,白皮書中以推廣城市田園發展都市農耕為主,透過結合現有的基地,擴大城市耕種面積。 田園城市推廣計畫之願景—「打造臺北市為一個綠色健康、教育、生活之田園城市」。
Thumbnail
 白皮書中的八個方向包括水資源循環再利用、再生能源整合優化、可食地景生態復育、資源回收多方運用...。接下來的專題要深入研究資源回收多方運用、可實地景生態復運和水資源循環再利用,這篇要探討資源回收在循環城市的角色,其中創造城市廢棄物的新價值是它的口號,期望一天能達到零垃圾台北的創舉。
Thumbnail
 現今,我們不再是一味的像抽血般將資源從大地下汲取出來,更不是不顧一切的像工業革命時代拼命生產,反倒開始注重了生活品質,生產效率還有我們的行為對未來世代的影響加上技術的進步,循環城市這個想法誕生了...