從跟著教學影片把老師的程式抄過一遍,變成看到題目能把題目轉為程式,對於初學者來說蠻困難的。所以我想以初學者的角度來分享自己怎麼適應這段轉換的過程,以及我解題的方法是什麼。(也順便紀錄一下自己的思路)
剛開始的時候我其實也不知道怎麼解題,跟工程師男友聊天時他提到,在收到PM提供的需求後,他會先去找出題目的關鍵字、思考要怎麼寫、最後才是開始動手寫程式。
這個過程其實跟平常工作中接到任何任務的時候一樣,先確認主管的目標、目的、需求、條件、時間、資源等等,先簡單規劃自己要怎麼做,才開始實際執行。
簡單來說解題的步驟就是:
• • •
以這題來說,題目中的關鍵字為「輸入」、「是否」、「質數」。很難以解釋我是怎麼抓出關鍵字的,但據我觀察關鍵字不外乎是動詞、名詞、或Yes or No,大家可以試著從這部份著手。
找出關鍵字後,就可以找出需要用到的工具,比如:
• • •
在拆解完題目後,我就來翻我的筆記(因為對於語法還不熟,沒有直接背起來),思考我的程式寫出來可能會長什麼樣。
開頭要有標準輸入,所以第一行會是:
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、標準輸入、資料型態、字串轉換成整數這幾個工具用的稍微熟練 一些,也自己學了字串判斷整數的語法。
事實證明笨鳥慢飛,只要你願意花時間投入、願意耐住性子爬文找解法(成為工程師必備)、再加上身邊有人能給你指點(這個就不是必須了,但絕對是加分),每個人都有機會學會怎麼寫程式!
• • •
如果你喜歡芽芽的分享、想知道更多的職場乾貨、或想聽聽芽芽發發牢騷,
歡迎留言、按愛心、收藏、追蹤、以及贊助芽芽,給芽芽一點點的鼓勵:)
• • •