关于田忌赛马
大一的時候C語言的期末考最后一題考了田忌賽馬 那時候那個程序是不停的 你不斷的輸入,他不斷的輸出 印象中知道你回車了兩次 那宣告程序結束
/*田忌賽馬 * 有一等馬 二等馬 三等馬 * 甲 挑選出戰順序 1 2 3 * 乙 挑選出戰順序 3 1 2 * 乙勝 * 程序輸出 * 1 2 3 * 3 1 2 * 乙勝 * 2 3 1 * 1 2 3 * 乙勝 * * */這里我構建了兩個模塊 一個是輸入構造數組的模塊 一個是比較的模塊
代碼說明
import com.sun.jdi.Value;import java.util.Scanner;/*田忌賽馬* 有一等馬 二等馬 三等馬* 甲 挑選出戰順序 1 2 3* 乙 挑選出戰順序 3 1 2* 乙勝* 程序輸出* 1 2 3* 3 1 2* 乙勝* 2 3 1* 1 2 3* 乙勝* * */ public class Demo01 {public static void main(String[] args) {while (true) {//死循環int[] arry1 = new int[3];int[] arry2 = new int[3];Scanner in = new Scanner(System.in);var player = new Demo01();//構建兩個數組arry1=player.toArray(in);arry2=player.toArray(in);player.compareTwo(arry1,arry2);}}public void compareTwo ( int[] a, int[] b){int acount = 0, bcount = 0;for (int i = 0; i < 3; i++) {if (a[i] < b[i]) {acount++;} else if (a[i] > b[i]) {bcount++;} else {continue;}}if (acount > bcount) {System.out.println("甲勝");} else if (acount < bcount) {System.out.println("乙勝");} else {System.out.println("平局");}}public int[] toArray(Scanner in){// 將傳入的三個數放入數組中構建數組模塊var array = new int[3];for (int i = 0; i < 3; i++) {//再把后三次鍵盤輸入的值賦給arry2int value = in.nextInt();array[i] = value;}return array;}}
初步滿足你輸入完他輸出結果這個要求
那接下來就是如何跳出這個循環 結束程序
我想的是 如果連續回車兩次 則跳出循環 結束程序 結束程序可以直接System.exit(0);
那是否可以給一個方法 傳入Scanner in 通過這個in 來判斷輸入是什么 然后結束程序
- 初步想法
在比較的后面加入個判斷結束模塊
如果直接判斷完就回車回車 是可以呈現類似輸出,但是
他會多接受一行輸入 這是我不想要的
那是不是可以換一下 把判斷是否連續輸出兩個回車作為結束標志放在前面 且不進行輸出 定義一個全局靜態變量,再把數組變成全局靜態的變量 不管輸入是什么,都輸入到數組對象名[0]這里面去,或者把輸入判斷放入構造數組中去。
這里要明確一個概念,就是Scanner的輸入
next()一定要讀取到有效字符后才可以結束輸入,對輸入有效字符之前遇到的空格鍵、Tab鍵或Enter鍵等結束符,next()方法會自動將其去掉,只有在輸入有效字符之后,next()方法才將其后輸入的空格鍵、Tab鍵或Enter鍵等視為分隔符或結束符。
那我們去判斷輸入是不是回車 是用in.nextLine().length() == 0來判斷,這就需要輸入一行nextLine()方法返回的是Enter鍵之前的所有字符,也就是說 如果這個方法返回的String的length==0 意味著輸入的是回車 我想要的是 不要這個一樣 就是把開始的輸入放到這個a[0]里面。
首先我們確保 第一次的比較都是成立的,那也就是說 在構建數組的時候 你已經放入三個值,for循環之后,判斷會不會連續輸出兩個回車結束 但不管怎么樣 我的判斷一直都是in.nextLine() ,所以把構造數組改掉 ,用in.nextline()獲得一個String 在從里面去抽出三個數放到我們的array里面。
代碼說明
結果截圖
也就是說我把結束程序的模塊放到了構件數組的地方 你在構建數組的時候 如果你連續輸入兩次回車 則結束程序 如果只輸入一次 則當你是失誤 下次輸入只要不是回車 還是可以構件數組 這就解決了你判斷跳出循環會多一個輸入行的顯示這個錯誤,在我構建數組的時候就把他扼殺掉。
這里我們了解到 兩個輸入要注意的就是in.next()不能判斷回車 它獲得了有效輸入后 才會檢測你的結束符
in.nextLine則不同 他都會檢測 ,如果要進行回車符的判斷 ,還是要瞧in.nextLine().
這樣就大致符合所要的輸出。
總結
- 上一篇: 求职信高中生计算机,高中生求职信.doc
- 下一篇: 《数据清洗》第六章课后操作