public static void detectRepairPilla (int ch;)
{
int ch =0;
if (beepersPresent())
{
ch = 1;
sPilla (int ch);
}
}
public void sPilla (int ch)
if (ch==0)
{
repair();
}
}
มือใหม่หัด java ครับ พยายามสร้าง Detect Pilla เพื่อให้ check ว่ามี object Beepers ในแถวหรือไม่
ตัวหุ่นจะวิ่งขึ้นหนึ่งรอบ ลงหนึ่งรอบ
มีคลาส runUp runDown แยกกัน
runUp จะเป็นการตรวจสอบแถวอย่างเดียว
แล้วส่งค่า 0/1 ไปให้ runDown พิจารณาว่าต้องทำการวางวัตถุเพื่อซ่อมแซม Pillar หรือไม่
ผมพยายามส่ง arguments แล้ว error แดงเต็มเลยครับ
static method เรียก non-static method ไม่ได้ครับ
แก้ง่ายสุดให้ detectRepairPillar เป็น non-static
public void detectRepairPilla(......
ในกรณีนี้เรียกได้ครับ เพราะ non-static method ตัวนี้เป็น public ครับ
แต่มีข้อแม้ว่า static method จะทำงานถูกต้องต่อเมื่อเรียกใช้หลังจากที่ class ของ non-static ตัวนั้นถูก instantiate ขึ้นมาแล้ว (สร้างเป็น object แล้ว)
เท่าที่เห็น ... error จาก systax ครับ
public static void detectRepairPilla (int ch;) เอา semi-colon ออกครับ
sPilla (int ch); เอา int ออกครับการส่ง argument ไม่ต้องประกาศ type ครับ อีกอย่างคือตัวแปร ch ถูกประกาศไปแล้ว
public void sPilla (int ch) if (ch==0) { repair(); } } ยังไม่มี { เปิด block method ครับ สังเกตุได้ว่า ปิด 2 แต่เปิด 1
ปล. error message มีไว้อ่านครับ อย่าขี้เกียจอ่าน อย่าขี้เกียจแปล ผมเพิ่งแพ่นกบาลน้องในแผนกไปคนนึง เพราะมันไม่ยอมอ่าน error message
แนะเพิ่มนะครับ คือ นอกจากโค๊ดจะคอมไพล์ไม่ผ่านแล้ว ผมไม่รู้ว่าไอ้พารามิเตอร์ (ของ Java จะใช้คำว่า parameter นะครับ ภาษาอื่นอาจจะเรียก argument) ch เนี่ย มันคืออะไร
ควรตั้งตัวแปรให้อ่านออกว่า ตัวแปรเนี่ยคืออะไร มีความหมายอย่างไร และควรจะเป็น noun clause ด้วย (คือเป็นคำนาม แต่อาจจะพ่วงคำคุณศัพท์เพิ่มด้วยก็ได้)
ส่วนเมธอด sPilla() ก็เหมือนกัน ผมไม่รู้ว่ามันคืออะไร s คืออะไร Pilla คืออะไร ผมเปิดdict แล้วไม่รู้ว่ามันแปลว่าอะไร (มีแต่คำว่า pillar ที่แปลว่าเสา ...) ชื่อฟังชั่นควรตั้งเป็น verb clause ครับ คืออาจจะขึ้นด้วย verb แล้วตามด้วย noun เพื่อที่จะบอกว่าเมธอดนี้คืออะไร
ถ้าส่งโค๊ดแบบนี้ไปรีวิวผมให้รีวิวไม่ผ่านนะ เพราะเรื่องชื่อนี่แหละ อย่าลืมว่าเราไม่ได้เขียนโค๊ดให้คอมไพล์เลอร์อ่าน (อย่างเดียว) นะครับ เราเขียนเพื่อให้ตัวเองอ่าน ให้โปรแกรมเมอร์คนอื่นอ่าน ดังนั้นถ้าโค๊ดที่เราเขียนเรายังอ่านไม่รู้เรื่อง โค๊ดนั้นก็ยังไม่ดีพอครับ ถึงแม้มันอาจจะทำงานถูกต้องก็ตาม
ถือว่าเป็น Obfuscator ในตัวละกัน
555
เงิบเลยท่าน กำลังอ่านมันๆ อยู่แท้ๆ
ตอนนี้ติด Error การ return ครับ ประกาศ return int ก็แล้ว ยังเป็นอยู่เลยครับ
http://i1208.photobucket.com/albums/cc375/Bobokung111/ScreenShot2555-04-28at51621PM.png
ชื่อ argument ใน checkPillaNorth ซ้ำกับ ของที่เคยประกาศไว้แล้ว เปลี่ยน a เป็นอย่างอื่นซะ
screen shot ก๊อปมาไม่ครบเลยไม่รู้ แต่เอาเมาส์ไป double click ที่ error มันวิ่งไปที่บรรทัดไหนก็แก้บรรทัดนั้นแหละคับ
แคปมาใหม่ นะครับ
http://i1208.photobucket.com/albums/cc375/Bobokung111/ScreenShot2555-04-28at74256PM.png
ต้องการทำ int a เป็น global value
ถ้าหาก BeeperPresent
int a = 1
เก็บค่าไว้
แล้วทีนี้ public int checkpilla south จะรับ a
มาพิสูจน์ว่า a==1 หรือไม่ เพื่อรัน method ******
พอจบกระบวนการก็จะทำให้ a=0 อีกครั้งนึง
ผมลองหาอ่านแล้วทุกที่ก็บอกแค่ให้ประกาศชนิดที่จะ return เท่านั้น
ผมแนะนำว่าบอกเป็นความต้องการดีกว่าครับ
เพื่อนๆ จะได้แนะนำถูก
ไม่ควรบอกว่าจะกำหนดตัวนี้เป็น int จะกำหนดตัวนี้เป็น global
อย่าง global นี่ผมใช้น้อยมากนะครับ หรือ global ที่บอกนี่หมายถึงตัวแปรระดับ class ครับ
เริ่มจากเขียนเป็น flowchart หรือ pseudo code ง่ายๆ ได้เลยครับ
return คุณเอาไปไว้ในปีกกาของ if ไม่ได้ มันอาจจะไม่โดนเรียกถ้าไม่ตรงตามเงื่อนไข อีกอย่างคุณสั่ง return a=1 ไม่ได้ จะ return อะไรก็ใส่ไปอย่างเดียว จะ a หรือจะ 1
ลองเอา return 1; ไปใส่ก่อนปิดปีกกาของ method checkPillaNorth สิ
ผมว่าเรียนแบบนี้ไม่เวิร์ค เพราะคุณยังไม่มีพื้นฐาน อย่างที่บอกอ่ะคับ ไปหาหนังสือภาษาไทยง่ายๆมาลองทำตามดูก่อน ถ้าอ่านภาษาอังกฤษโดยไม่มีพื้น ไม่รู้ศัพท์แสงทางโปรแกรมมิ่งมันจะเข้าใจผิดไปกันใหญ่