2019-11-11 22:18:09
练习1:输入n行字符串,找到字符串里面最长、最短的字符串;如果相同最长、最短的情况,一并打印。
最初思想:将n行字符串存入数组中。(Scanner s=new Scanner(System.in);)
写找最长字符串的方法:先将0号元素记为长度最长的字符串。用max值记录当前0号位元素的长度。for循环遍历剩下的字符串,如果有长度比它大的,将max值更新为新的字符串的长度,将字符串更新为当前字符串。找最短字符串的方法同理。
如果有相同长度长的字符串,怎么办?开始的想法是:同样长度的字符串可能不止一个,所以另外开辟一个数组,将同样长度的字符串存入数组中,最后返回数组。最后没有改成功,又想到了用字符串拼接的方法;定义另一个字符串,如果有相等长度的,就将两个字符串拼接起来,返回拼接后的字符串
private static String findMin(String[] arr) { String str4 = arr[0]; //String str5 = arr[arr.length-1]; int min = str4.length(); for (int i = 1; i < arr.length; i++) { if (arr[i].length() < min) { min = arr[i].length(); str4 = arr[i]; for (int j = i+1; j < arr.length; j++) { if (arr[j].length() == arr[i].length()) { String str5= arr[j]; str4=str4+" "+str5; } } } } return str4+" "; }
起初,将另外可能存在的字符串定义在了开始,但是这个字符串不一定存在,所以后来将它定义在了判断语句里面;实现了字符串的拼接,将拼接后的结果返回。
还有一个问题,在主函数中:因为要输入字符串的个数,所以先输入一个数字,再提醒输入要比较的字符串后,因为输入格式发生了变化,编译器会默认将回车当成一个字符串,所以需要一个nexLine(),将回车键换掉。还有:缺少了将输入的字符串存入到要比较的数组里面的语句(粗心!!)
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(); }
整个代码为:
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); System.out.println("最大的字符串:" + max.toString());//String已经重写了toString方法,所以会打印出字符串 String min = findMin(arr); System.out.println("最小的字符串:" + min.toString()); } private static String findMin(String[] arr) { String str4 = arr[0]; //String str5 = arr[arr.length-1]; int min = str4.length(); for (int i = 1; i < arr.length; i++) { if (arr[i].length() < min) { min = arr[i].length(); str4 = arr[i]; for (int j = i+1; j < arr.length; j++) { if (arr[j].length() == arr[i].length()) { String str5= arr[j]; str4=str4+" "+str5; } } } } return str4+" "; } private static String findMax(String[] arr) { String str = arr[0]; //将数组的0号位定义为str长度最长的字符串,依次比较 //String str6 = arr[arr.length - 1]; //String[] strr = new String[arr.length]; int max = str.length(); for (int i = 1; i < arr.length; i++) { if (arr[i].length() > max) { //如果某个字符串的长度比它大 max = arr[i].length(); //将该字符串的长度更新为最大的 str = arr[i]; //并将该字符串赋给str for (int j = i+1; j < arr.length; j++) { //如果有与这个字符串相同长度的 if (arr[j].length() == arr[i].length()) { String str6 = arr[j]; //将这个字符串给新的str6,然后一起打印出来 str=str+" "+str6; } } } } return str + " "; } }