首先,要求找到最長最短字符串,我們應該用數組將其存起來,輸入的個數是不固定的,我們就可以用Scanner獲取要輸入的個數,最終找到的個數也不固定,我們可以封裝兩個方法,並且返回值類型為數組。
我遇到的問題,開始我想到的是字符串拼接,么想到返回值用數組存,導致每次返回的個數都是固定的,就算有多個。
代碼如下:
import java.util.Scanner; //輸入n行字符串,找出最長最短字符串(若有個數相同的,都打印出來) public class FindString { public static void main(String[] args) { Scanner s = new Scanner(System.in); System.out.println("請輸入n個字符串"); int n = s.nextInt(); String[] arr = new String[n]; s.nextLine(); System.out.println("請輸入字符串"); for (int i = 0; i < n; i++) { arr[i] = s.nextLine(); } String[] max = findMax(arr,arr[0]); System.out.println("最長的: "); for (int i = 0; i < max.length; i++) { if(max[i] != null){ System.out.print(max[i]+" "); } } System.out.println(); String[] min = findMin(arr,arr[0]); System.out.println("最短的:"); for (int i = 0; i < min.length; i++) { if(min[i] != null){ System.out.print(min[i]+" "); } } } /** * 找最短的 * @param arr 輸入的數組 * @param s 數組的第一個元素 * @return 返回的數組中放着最長的子串和null */ private static String[] findMin(String[] arr, String s) { int min = s.length(); String[] temp = new String[arr.length]; for (int i = 1; i < arr.length ; i++) { if(arr[i].length() < min) { min = arr[i].length(); s = arr[i]; } } //走完說明找到了一個最長的,以這個長度為參考再遍歷一遍數組,找到與其相同長度的 for (int j = 0; j < arr.length ; j++) { if( arr[j].length() == s.length()){ temp[j] = arr[j]; } } return temp; } private static String[] findMax(String[] arr, String s) { int max = s.length(); String[] temp = new String[arr.length]; for (int i = 1; i < arr.length ; i++) { if(arr[i].length() > max) { max = arr[i].length(); s = arr[i]; } } for (int j = 0; j < arr.length ; j++) { if( arr[j].length() == s.length()){ temp[j] = arr[j]; } } return temp; } }