calculationEven , calculationOdd , resetValue
ต้องไปเปลี่ยน int afterValue , int currentValue ของ copyHailstone ครับ
ทีนี้คือต้อง return ทั้ง afterValue , currentValue
ผมเลยสร้างคลาส myVal ขึ้นมา กะใช้ return int afterValue , int currentValue
และก็ไม่รู้จะต้องแก้โค้ด ยังไงต่อครับ (อ่าน tutorial แล้วแต่ก็ไม่เข้าใจว่าสุดท้ายตัวแปรเดินทางยังไง มองไม่เห็นภาพครับ)
http://s1208.photobucket.com/albums/cc375/Bobokung111/?action=view¤t=ScreenShot2555-06-02at124436PM.png
http://s1208.photobucket.com/albums/cc375/Bobokung111/?action=view¤t=ScreenShot2555-06-02at125540PM.png
เอาที่เห็น ๆ เลยนะครับ ...
MyVal เป็นคลาสที่มีสมาชิกสองตัวเป็น private ดังนั้นตัวแปรสองตัวนี้จะไม่มีทางที่จะถูกเข้าถึงได้จากภายนอก และในปัจจุบันก็ไม่มีการเข้าถึงจากภายในคลาสด้วย
โค๊ดที่มีปัญหาคือ ฟังก์ชั่นนี้มี return type เป็น int แต่คุณไม่ได้ return ค่าอะไรกลับมา ดังนั้นมันจึงคอมไพล์ไม่ผ่านครับ
ลองทำความเข้าใจกับโค๊ดข้างล่างดูนะครับ
{syntaxhighlighter class="csharp"}
class ReturnValue
{
public value1;
public value2;
}
class Calculation
{
public ReturnValue Calculates( int a, int b)
{
ReturnValue output = new ReturnValue();
output.value1 = a + b;
output.value2 = a * b;
}
{/syntaxhighlighter}
โค๊ดนี้จริง ๆ ก็ยังไม่ใช่โค๊ดที่ดีที่สุดนะ (มีจุดทีต้องแก้อีก) ผมยังไม่เคยลองคอมไพล์ด้วยซ้ำ อาจจะไม่ผ่านก็ได้ 555 แต่ลองดูครับ
ปล. ผมแนะนำให้คุณไปศึกษาพวก OOP ด่วนเลย
ปลล. เดี๋ยวต้องมีคนมาถามว่าทำไมไม่ใช่ struct แน่เลย 555 กลัวว่าจะไม่รู้จักเลยเอาอันที่คุ้นเคยก่อนดีกว่าน่ะ
Test -> test ;p
Test น่าจะถูกแล้วนะครับ ตามธรรมเนี่ยมการตั้งชื่อ public method ของ C# จะใช้ตัวใหญ่ขึ้นต้นเสมอ ><
แต่ถ้าใช้ C# ทำแบบนี้ก็ได้นะครับ
public void Calculates( int a, int b,out int output1,out int output2) { output1 = a + b; output2 = a * b; }
ปล. แต่เจ้าของกระทู้ใช้จาวา ก็ทำตามท่าน mr_tawan ผมว่าก็ดีแล้วนะครับ
ฮ่า เขียน C# ไม่เป็นอ่าา
ผมดูรูปแล้ว นึกว่าเขาเขียน C# บน Visual Studio อ่ะครับ 555
จริงๆ ไม่แน่ใจว่าภาษาอะไร เอิ๊กๆ
return เป้น array (ไม่ชัวร์ว่าข้างล่างนี่ใช้ได้ไหมนะครับ)
{syntaxhighlighter "brush:java"}
public int[] getNum(){
//do something
return int[]{currentValue,afterValue};
}
{/syntaxhighlighter}
เข้าใจแล้วครับ รบกวนถามเพิ่มคือ สงสัยว่า constructor ในคลาส ReturnValue มีประโยชน์ยังไง ครับ ถ้าไม่สร้างจะมีผลเสียอย่างไร
ปกติถ้าไม่สร้างขึ้นเอง หรือสร้างขึ้นแต่ไม่มีอะไรข้างใน ก็มีผลแบบเดียวกันครับ เนื่องจากปกติ compiler จะจัดการสร้าง constructor ที่ไม่รับพารามิเตอร์ ให้เองอยู่แล้ว
นอกจากนี่สิ่งที่ควรรู้คือใน constructor จะมีการเรียก constructor ที่ไม่รับพารามิเตอร์ของคลาสแม่โดยอัตโนมัติ หากเราไม่ได้ระบุเอาไว้