[問題] 關於FOR迴圈

看板C_Sharp作者 (tony)時間13年前 (2011/03/23 09:20), 編輯推噓5(5014)
留言19則, 6人參與, 最新討論串1/1
小弟我是個新手 想要寫出目前所需要金額一直寫不出來 EX:請輸入欲購買張數 5 請輸入欲購買者年齡 18 您目前所需給予的金額為 40 請輸入欲購買者年齡 20 您目前所需給予的金額為 80 但是一直跑不出正確的數值 所以想PO程式碼 請教各位先進 以下是我的程式碼 ----------------------------------------------- int amount; double price = 0;//宣告一個名稱為price、初始值為0的變數 double a = 0; int adultticket = 0, oldticket = 0, childticket = 0; Console.WriteLine("請輸入欲購買總張數:"); amount = int.Parse(Console.ReadLine()); int[] age = new int[amount]; double[] charge = new double[amount]; for (int i = 0 ; i < amount; i++ ) { Console.WriteLine("請輸入欲購買者年齡:"); age[i] = int.Parse(Console.ReadLine()); double price1 = 0; double price2 = 0; double price3 = 0; double price4 = 0; if (age[i] > 65) { Console.WriteLine("購買者為老人以老人票計"); oldticket = oldticket + 1; } else if (age[i] < 18) { Console.WriteLine("購買者為兒童以兒童票計"); childticket = childticket + 1; } else { Console.WriteLine("購買者為成人以成人票計"); adultticket = adultticket + 1; } if (age[i] > 65 ) { int fee = 40; price = fee * 0.3; price1 = price * oldticket; } else if (age[i] < 18 ) { int fee = 40; price = fee * 0.5; price2 = price * childticket; } else if (18 <= age[i] && age[i] <= 65 && amount > 5) { int fee = 40; price = fee * 0.8; price3 = price * adultticket; } else { int fee = 40; price = fee; price4 = price * adultticket; } charge[i] = price1 + price2 + price3 + price4; for (int j = 0; j <= i; j++) { a = a + charge[j]; } Console.WriteLine("您目前所需給予的金額為:" + a); } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.66.168.37

03/23 09:32, , 1F
03/23 09:32, 1F

03/23 11:57, , 2F
我就好心提示你一下..你的xxxxxticket都是全域變數, 觀察你
03/23 11:57, 2F

03/23 11:58, , 3F
的 input 跟 output 就可以猜到錯在哪了
03/23 11:58, 3F

03/23 12:00, , 4F
另外, 每一輪都算一次sum不是個好方法. 定個全域變數每輪把
03/23 12:00, 4F

03/23 12:00, , 5F
當次算出的數字加上去就夠達到你要的效果了
03/23 12:00, 5F
james732大大您說的方式 好像跟我想要的程式結果不太一樣 照您所說的方式 年齡輸入不同的話 會變成這樣 例如 18歲 40元 73歲 12元 但是我是想要 18歲 40元 73歲 52元 arcred大大您說的 input 跟 output 就可以猜到錯在哪了 可以麻煩您在講解清楚點嗎? 現在的我太菜了 看不太出來 ※ 編輯: tony80720 來自: 61.60.254.9 (03/23 22:56)

03/23 23:00, , 6F
怎不用switch比較方便?
03/23 23:00, 6F

03/23 23:34, , 7F
adultticket為啥要++??用你的case,第一個人18歲 第二個人
03/23 23:34, 7F

03/23 23:35, , 8F
40歲,第二次run的時候++變成2,後面當然就*2倍???
03/23 23:35, 8F

03/23 23:40, , 9F
而且後面還一直累加.....(a = a + charge[j];)
03/23 23:40, 9F

03/23 23:41, , 10F
^^先想想整個流程、順序,先在心裡想一下回圈的跑法
03/23 23:41, 10F

03/23 23:42, , 11F
再動手寫,這會比還沒想清楚,然後寫完了再Debug還要更能
03/23 23:42, 11F

03/23 23:43, , 12F
學到東西喔^^
03/23 23:43, 12F
hatasum大大adultticket為啥要++? 這個想法我是想說要累計有幾張成人票 之後再乘以成人票價格 這個想法有問題嗎? ※ 編輯: tony80720 來自: 61.60.254.9 (03/24 02:22)

03/24 03:24, , 13F
那請列出一個您程式跑出的input跟output, 我告訴您如何觀察
03/24 03:24, 13F
int oldticket = 0, childticket = 0; Console.WriteLine("請輸入欲購買總張數:"); amount = int.Parse(Console.ReadLine()); int[] age = new int[amount]; for (int i = 0 ; i < amount; i++ ) { Console.WriteLine("請輸入欲購買者年齡:"); age[i] = int.Parse(Console.ReadLine()); if (age[i] > 65) { Console.WriteLine("購買者為老人以老人票計"); oldticket = oldticket + 1; } else (age[i] < 18) { Console.WriteLine("購買者為兒童以兒童票計"); childticket = childticket + 1; } else { Console.WriteLine("購買者為成人以成人票計"); adultticket = adultticket + 1; } Console.WriteLine(oldticket); Console.WriteLine(adultticket); Console.WriteLine(childticket); } 請問這是您說的INPUT、OUTPUT嗎? PS.我已經照您的方法寫出正確的跑法了 不過還是有點不懂您說的INPUT OUTPUT 謝謝您 ※ 編輯: tony80720 來自: 61.60.254.9 (03/24 10:23)

03/24 11:49, , 14F
原來你的問題在不了解術語的意思(其實也不是什麼術語) @@"
03/24 11:49, 14F

03/24 11:49, , 15F
input, output通常指使用者的輸入值, 跟程式印出的值
03/24 11:49, 15F

03/24 11:53, , 16F
例如你原本的程式依序輸入5,18,20的in會得到40,120的out
03/24 11:53, 16F

03/24 22:55, , 17F
謝謝您我懂了
03/24 22:55, 17F

04/06 01:04, , 18F
我們剛剛上課在教這邊耶哈哈
04/06 01:04, 18F

04/06 01:04, , 19F
還好我有些過來看 就知道怎麼打了
04/06 01:04, 19F
文章代碼(AID): #1DYKh4e3 (C_Sharp)