程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> 小白求教-小白求答,寫了個猜字母的代碼,可是它識別不了我的答案,求大神解惑

小白求教-小白求答,寫了個猜字母的代碼,可是它識別不了我的答案,求大神解惑

編輯:編程解疑
小白求答,寫了個猜字母的代碼,可是它識別不了我的答案,求大神解惑

import java.util.Scanner;

public class Guess {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    //第一步:定義數據結構:
    /*Input:*/
    char[] chs = new char[5];//保存隨機生成的5個字母
    char[] input = new char[5];//保存用戶輸入的5個字母
    /*Output:*/
    //第幾次嘗試,猜對幾個字母,幾個字母的位置正確
    int times=0,right=0,position=0;
    int score=0;//分數
    char[] realtime=new char[5];//保存實時顯示猜對位置字母的數組
    /*隱含變量*/
    String inStr=" ";//臨時保存從控制台錄入的字符串
    /*process*/
    generate(chs);
    /*打樁測試*/
    for(int i=0;i<chs.length;i++){
        System.out.print(chs[i]+",");
    }
    /*主程序循環*/
    Scanner sc=new Scanner(System.in);//只有從控制台獲得用戶輸入就用Scanner
    System.out.println("游戲開始...");
    //循環
    /*字符串不是基本類型,做等值比較,不能用==
     * 應該使用Java專門的API比較字符串是否相等
     * 語法:字符串1.equals(字符串2);
     */
    while(!inStr.equals("EXIT")&&position!=chs.length){
        System.out.println("請輸入5個字母,按回車繼續...(exit-退出)");
        //Step2:獲得用戶輸入:
        /*獲得用戶輸入的字符串:sc.next()——返回輸入整個字符串
         * 防止、去掉空格:字符串.trim()——去掉字符前後空格
         * 將輸入的字符串中所有的小寫字母,統一轉換為大寫字母:
         *      字符串.toUpperCase()
         */
        inStr=sc.next().trim().toUpperCase();
        //Stpe3:判斷:如果用戶輸入的不是exit,才繼續
        if(!inStr.equals("EXIT")){
            //Stpe4:將字符串,轉化為字符數組,保存到input數組中
            //將字符串轉換為字符數組的API:字符數組=字符串.toCharArray()
            input=inStr.toCharArray();
            //Step5:比較chs和input兩個數組的相似程度
            //得到right:猜對幾個字母
            //得到position:猜對位置的有幾個
            //得到realtime:猜對位置的實時數組
            int[] result=compare(chs,input,realtime);
            right=result[0];
            position=result[1];
            //Step6:如果沒有都猜對
            if(position!=chs.length){
                //將嘗試次數+1
                times++;
        System.out.println("第"+times+"次嘗試:"+"猜對了"
                        +right+"個字母,"+"其中"+position+
                        "個位置正確"); 
        for(int i=0;i<realtime.length;i++){
            System.out.print(realtime[i]+",");
        }
        System.out.println();
            }       
        }
    }
    /*如果推出循環,只有兩種情況:
     * 1用戶輸入exit,主動退出,輸入歡迎下次再來
     * 2用戶猜對了(position==chs.length)
     * 計算得分:100*chs.length-10*times
     * 輸出,恭喜你猜對了
     * */
    if(inStr.equals("EXIT")){
        System.out.println("歡迎下次再來!");
    }else{
        score=100*chs.length-10*times;
        System.out.println("恭喜您,猜對了,本次得分:"+score);
    }
}
/**
 * 比較兩個數組
 * 1.求出猜對幾個字母,有幾個字母的位置正確
 * 2.將比較結果分別保存在返回值數組的第一個元素和第二個元素中
 * 3.將位置正確的字母在realtime中實時顯示
 * @param chs 隨機生成的目標數組
 * @param input 用戶輸入的數組
 * @param realtime 實時顯示猜對位置的元素數組
 * @return 1個數:[0]保存猜對字母的個數
 *               [1]保存猜對位置的個數
 */
public static int[] compare(char[]chs,char[]input,char[]realtime){
    //數組的第一個元素[0],表示有幾個相同的字母
    //數組第二個元素[1],表示位置有幾個相同的字母
    int[] result=new int[2];//新建兩個整數元素的數組
    /*
     * 反復取出input數組中每個元素和chs數組中每個元素比較
     * 只有input中的元素和chs中的元素相等
     * 對result[0]+1,表示猜對了一個字母
     * 立刻判斷此時的位置是否相同(i==j)
     * 如果i==j
     * 對result[1]+1,表示猜對了一個位置
     * 將才對的字母,填入realtime數組相同的位置
     */
    for(int i=0;i<input.length;i++){
        for(int j=0;i<chs.length;i++){
            if(input[1]==chs[j]){
                result[0]++;
                if(i==j){
                    result[1]++;
                    realtime[i]=input[i];
                }
                break;
            }
    }
    }
    return result;
}
    /**
     * 自動生成5個不重復的字母,直接保存在數組chs中
     * @param chs:傳入一個空數組。
     *      方法內,對數組的更改,直接作用於原數組
     */

    public static void generate(char[] chs){
        /*
         * 反復生成多個字母,就要用循環:
         * 循環變量:int i=0;
         * 循環條件:i<chs.length;
         * 迭代循環變量:無規律
         *      只有生成字母不重復時,才+1!
         * 循環體:隨機生成65~90之間的1個整數。
         * 判斷剛生成的整數,在數組中是否重復
         * 如果沒有重復,就加入數組chs中,並且i++
         * (否則什麼都不做,再生成一個新字母,再比較)
         */
        //因為循環次數和迭代規律不確定,所以使用while循環
        int i = 0;//定義循環變量
        while(i<chs.length){
            //隨機生成65-90之間的整數
            int r=(int)(Math.random()*(90-65+1)+65);
            //判斷r是否在數組中包含
            //定義1個布爾類型變量,表示r是否可用。默認是ture.
            boolean enable=true;
            //循環遍歷數組的每個元素,和r比。
            //只要任意1個元素等於r,則改變變量enable=false,表示r不可用。
            for(int j=0;j<i;j++){
                if(chs[j]==r){
                    enable=false;
            }
        }
            if(enable){//如果r可用
                chs[i]=(char)r;
                i++;
        }
        }   
    }
}

最佳回答:


**_for(int j=0;j<chs.length;j++){//第一部分
                if(input[i]==chs[j]){//第二部分**_
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved