1. 程式人生 > >定義數字字串陣列{"010","3223","666","7890987","123123"} 判斷該數字字串陣列中的數字字串是否是對稱

定義數字字串陣列{"010","3223","666","7890987","123123"} 判斷該數字字串陣列中的數字字串是否是對稱

原題目:

分析以下需求,並用程式碼實現:
 (1)定義數字字串陣列{"010","3223","666","7890987","123123"}
 (2)判斷該數字字串陣列中的數字字串是否是對稱(第一個數字和最後一個數字相等,第二個數字和倒數第二個數字是相等的,依次類推)的,並逐個輸出
 (3)如:010 是對稱的,3223 是對稱的,123123 不是對稱的
 (4)最終列印該陣列中對稱字串的個數
 
 提示:迴圈獲取字串的每一個字元,依次比較第一個和最後一個,第二個和倒數第二個。。。

老規矩,先貼上 參考的其他人的

public class Test01 {

        public static void main(String[] args) {
                // 定義數字字串陣列
                String[] str = { "010", "3223", "666", "7890987", "123123" };
                // 對陣列進行遍歷
                for (int i = 0; i < str.length; i++) {
                        //用s對接收上一個字串
                        String s = str[i];
                        //判斷是否對稱
                        if (isSymmetric(s)) {        //抽取一個方法
                                //如果對稱列印
                                System.out.println(s);
                        }
                }
        }
        /*
         * 引數列表是字串
         * 返回值型別是布林
         */
        public static boolean isSymmetric(String s) {
                String s2 = "";//定義一個字串
                //對字串倒序遍歷
                for (int i = s.length()-1; i >= 0; i--) {
                        s2+=s.charAt(i);//對字串進行索引,並賦值給s2
                }
                return s2.equals(s);        //返回一個布林值,比較s2與s的值是否相等
        }

}
public class Demo_01 {
        public static void main(String[] args) {
                String[] s = {"010","3223","666","7890987","123123"}; 
                String s1 = "";
                
                for(int i=0;i<5;i++) {                      //第一層for迴圈把字串陣列轉換成字串
                         s1 = s[i];
                         char[] c2 =new char[s1.length()];
                        //System.out.println(s1);
                         for(int j=0;j<s1.length();j++) {      // 這層for迴圈把字串轉換成字元陣列
                                char c = s1.charAt(j);
                                c2[j] = c;
                                //System.out.print(c + " ");
                        }
                        for(int k=0;k<c2.length/2;k++) {      // c2.length/2是判斷的次數,
                                if(c2[k] == c2[c2.length-1-k]) {
                                        if(k==c2.length/2-1) {
                                                print(c2);
                                                System.out.println("是對稱的");
                                        }
                                }else {
                                        print(c2);
                                        System.out.println("不是對稱的");
                                        break;
                                }
                        }
                }
        }
        public static void print(char[] arr) {            //遍歷字元陣列
                for(int i=0;i<arr.length;i++) {
                        System.out.print(arr[i]);
                }
        }

}
public static void main(String[] args)  
{         
    <span style="white-space:pre;"> </span>/* 
<span style="white-space:pre;"> </span> * 2、判斷是否對稱 "010","3223","666","7890987","123123" 
     */  
    String[] str = {"010","3223","666","7890987","123123"};  
    for(int i = 0; i < str.length; i++)  
    {         
        for(int j=0; j < str[i].length()/2; j++)  
        {  
            if(str[i].charAt(j) == str[i].charAt(str[i].length()-j-1))  
            {  
                System.out.print("對稱:"+str[i]);  
                System.out.println();  
                break;  
            }  
            else  
            {  
                System.out.print("不對稱:"+str[i]);  
                System.out.println();  
                break;  
            }  
        }  
    }  
}  


四、這一些是一些回答,但是我沒試,大家有時間可以試一試。

五、最後呢,是我的解法,附上程式碼如下:

package cn.itcast.demo04;

public class Demo03 {
	public static void main(String[] args) {
		String[] str = {"010","0987320","0125310","3223","666","7890987","123123" };
		isSymmetrical(str);
		
	}
	public static void isSymmetrical(String[] str) {
	/*	
	 * 建立buffer緩衝區,來儲存 String陣列中的單個 str[i]
	 *	然後利用buffer的reverse功能,將str[i] 反轉,然後跟原來的字串比較
	 *	如果相同,則輸出 ”str[i] 是對稱的“  如果不同,則輸出 “str[i] 是不對稱的”
	*/
		StringBuffer buffer = new StringBuffer();
		
		for (int i = 0; i < str.length; i++) {
			//先清空buffer緩衝區,以便只裝一個字串陣列,比較完,輸出完之後,再接受下一個
			buffer.delete(0, buffer.length());
			//buffer.append(str[i]).reverse().toString() 這是一個呼叫鏈
			//其意思就是str[i]的反轉  如果str[i]跟他的反轉相同,那麼就是對稱的
			boolean b = str[i].equals(buffer.append(str[i]).reverse().toString());
			
			//如果是對稱的,b就是true,輸出對應語句,相反的,道理是一樣的。
			if(b == true) {
				System.out.println(str[i]+"  是對稱的");
				continue;
			}
			System.out.println(str[i]+"  是不對稱的");
		}
	}
}

效果圖如下:



希望對大家能夠有所幫助

追加: 

我又實驗了另外一種方法,感覺還可以,就貼上來給大家共享了

/*
 * 3.分析以下需求,並用程式碼實現:
	(1)定義數字字串陣列{"010","3223","666","7890987","123123"}
	(2)判斷該數字字串陣列中的數字字串是否是對稱(第一個數字和最後一個數字相等,
	         第二個數字和倒數第二個數字是相等的,依次類推)的,並逐個輸出
	(3)如:010 是對稱的,3223 是對稱的,123123 不是對稱的
	(4)最終列印該陣列中對稱字串的個數
	
	提示:迴圈獲取字串的每一個字元,依次比較第一個和最後一個,第二個和倒數第二個。。。
 */

/*
 *    在網上找了一個方法。大致思想是:
 *      (1) 用雙重迴圈,外層迴圈遍歷 str[] (字串陣列),內層迴圈遍歷str[i],即字串
 *      (2)字串的比較時,用第一個跟最後一個比較,第二個跟倒數第二個比較,以此類推
 *      (3)判斷,如果上面比較的都相同,那麼就輸出 str[i] 是對稱的
 *      如果不都相同,那麼就輸出str[i] 是不對稱的
 */

package cn.itcast.demo04;

public class Demo04 {
	public static void main(String[] args) {
		String[] str = {"010","3223","666","7890987","0123563210","123123" };
		isSymmetrical(str);
	}
	
	//比較函式isSymmetrical(){}
	public static void isSymmetrical(String[] str) {
		//外層迴圈遍歷String[] str
		for (int i = 0; i < str.length; i++) {
			//內層迴圈遍歷str[i] 第一個跟最後一個,
			//第二個跟倒數第二個,所以,不用迴圈所有,只需要一半就ok了
			for (int j = 0; j <= str[i].length()/2; j++) {

				
				/*	
				 * 這一段註釋的程式碼,本來是想刪掉的,但是,說句實在的,廢了好多心思,不論對的錯的,刪了都很可惜,還是留著吧?
				 * 	if(str[j] == str[str[i].length()-1-j]) {
					if(j >= str[i].length()/2-1) {
						System.out.println(str[i]+"  是對稱的");
						break;
					}
				}else {
					System.out.println(str[i]+"  不是對稱的");
					break;
				}*/
				
				if(str[i].charAt(j) == str[i].charAt(str[i].length()-1-j)) {
					if(j == (str[i].length())/2-1) {
						System.out.println(str[i]+"  是對稱的");
					}
					continue;
				}else {
					System.out.println(str[i]+"  不是對稱的");
					break;
				}
				
			}
		}
	}
}

效果圖奉上: