定義數字字串陣列{"010","3223","666","7890987","123123"} 判斷該數字字串陣列中的數字字串是否是對稱
阿新 • • 發佈:2019-01-31
原題目:
分析以下需求,並用程式碼實現:
(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;
}
}
}
}
}
效果圖奉上: