黑马程序员技术交流社区

标题: 请问大神 这道题怎么做 [打印本页]

作者: P神    时间: 2016-4-2 08:18
标题: 请问大神 这道题怎么做
编写一个类,其中包含两个排序的方法sort(),参数不同,当键盘录入的是一串整数,就按照从小到大的顺序输出,
如果键盘录入的是一个字符串,就将字符串反序输出


作者: oassuperhan    时间: 2016-4-2 09:27
方法重载啊,sort(int i);sort(String s);分别实现方法.然后在main方法中,用Scanner接收字符串,判断如果字符串是纯数字,则调用sort(Integer.parseInt(s));如果非则调用sort(s);
作者: fmi110    时间: 2016-4-2 09:48
方法重载,定义两个同名的sort()函数,参数类型不一样,函数调用时会自动根据参数调用对应的参数
  1. import java.util.Arrays;
  2. import java.util.Scanner;

  3. public class Demo {

  4.         /**
  5.          * @param args
  6.          */
  7.         public static void main(String[] args) {

  8.                 Scanner in = new Scanner(System.in); // Scanner类
  9.                 while (true) {

  10.                         System.out.println("输入整数:");
  11.                         int digit = in.nextInt();
  12.                         System.out.println("调用函数输出:" + sort(digit));

  13.                         System.out.println("输入字符串:");
  14.                         String str = in.next();
  15.                         System.out.println("调用函数输出:" + sort(str));

  16.                 }
  17.         }

  18.         public static String sort(String str) {
  19.                 // 字符串倒叙输出
  20.                 return new StringBuilder(str).reverse().toString();
  21.         }

  22.         public static String sort(int digit) {
  23.                 // 整数排序
  24.                 String str = digit + "";
  25.                 char[] chars = str.toCharArray();
  26.                 Arrays.sort(chars);
  27.                 StringBuffer sb = new StringBuffer();
  28.                 for(int i=0;i<chars.length;i++){
  29.                         sb.append(chars[i]);
  30.                 }
  31.                 return sb.toString();
  32.         }
  33. }
  34. 运行结果:
  35. 输入整数:
  36. 231
  37. 调用函数输出:123
  38. 输入字符串:
  39. qasd
  40. 调用函数输出:dsaq
  41. 输入整数:
  42. 777423
  43. 调用函数输出:234777
  44. 输入字符串:
  45. itheima.com
  46. 调用函数输出:moc.amiehti
复制代码

作者: z332406259    时间: 2016-4-2 10:01
楼上大大的处理方法是可以的.但是在下比较喜欢钻牛角尖.如果不通过2句提示语句输入,而是只有一个提示,让你输入,系统自动判断你输入的是整数还是字符串,根据你的输入调用不同的方法,这样是不是更符合题意呢?
作者: z332406259    时间: 2016-4-2 10:07
fmi110 发表于 2016-4-2 09:48
方法重载,定义两个同名的sort()函数,参数类型不一样,函数调用时会自动根据参数调用对应的参数 ...

楼上大大的处理方法是可以的.但是在下比较喜欢钻牛角尖.如果不通过2句提示语句输入,而是只有一个提示,让你输入,系统自动判断你输入的是整数还是字符串,根据你的输入调用不同的方法,这样是不是更符合题意呢?
可不可以将键盘录入的用字符串接收,然后对字符串的元素进行遍历包装,然后捕获异常,若存在非数字元素必然异常,此时只做字符串反转的操作.而若没有异常则对数字字符串进行排序输出操作.
在下新人一枚,请大大不吝赐教.
作者: itgaga    时间: 2016-4-2 10:19
用Scanner接收字符串时一定要进行判断,判断如果字符串是纯数字进行一一匹配
作者: P神    时间: 2016-4-2 11:05
我也觉得程序应该能自己判断是否是数字
作者: 蓝色小宇宙    时间: 2016-4-2 13:00
需要先判断是整数还是字符串的
  1. import java.math.BigInteger;
  2. import java.util.Arrays;
  3. import java.util.Scanner;

  4. public class Test_ForSort {
  5.         public static void main(String[] args) {
  6.                 /*
  7.                  * 编写一个类,其中包含两个排序的方法sort(),参数不同,当键盘录入的是一串整数,就按照从小到大的顺序输出,
  8.                  * 如果键盘录入的是一个字符串,就将字符串反序输出
  9.                  * 分析:
  10.                  * 1.键盘录入,判断是否是整数或者字符串
  11.                  * 2.定义两个方法,参数不同方法名相同,方法重载sort()
  12.                  */
  13.                 Scanner sc = new Scanner(System.in);
  14.                 System.out.println("请输入整数或字符串:");
  15.                 //无论是整数还是字符串,都是先当做字符串
  16.                 String line = sc.nextLine();
  17.                 //用捕抓异常的方法来判断是否是整数
  18.                 try {
  19.                         //整数的范围可能会超出int范围,所以用BigInteger接收
  20.                         BigInteger bi = new BigInteger(line);
  21.                         sort(bi);
  22.                 } catch (Exception e) {
  23.                         //不是整数的都当做字符串
  24.                         sort(line);
  25.                 }
  26.         }
  27.         private static void sort(BigInteger bi) {
  28.                 char[] arr = bi.toString().toCharArray();
  29.                 //数组的排序方法
  30.                 Arrays.sort(arr);
  31.                 //还有另一种,冒泡排序法,当然也可以选择排序法
  32.                 /*for (int i = 0; i < arr.length; i++) {
  33.                         for (int j = 0; j < arr.length-i; j++) {
  34.                                 if (arr[j] > arr[j+1]) {
  35.                                         char c = arr[j];
  36.                                         arr[j] = arr[j+1];
  37.                                         arr[j+1] = c;
  38.                                 }
  39.                         }
  40.                 }*/
  41.                 //遍历数组,输出每个元素
  42.                 for (char c : arr) {
  43.                         System.out.print(c);
  44.                 }
  45.                 System.out.println();
  46.         }
  47.        
  48.         private static void sort(String line) {
  49.                 //转换为StringBuilder
  50.                 StringBuilder sb = new StringBuilder(line);
  51.                 //反转方法
  52.                 sb.reverse();
  53.                 //输出
  54.                 System.out.println(sb);
  55.         }
  56. }
复制代码

作者: fmi110    时间: 2016-4-2 16:49
z332406259 发表于 2016-4-2 10:07
楼上大大的处理方法是可以的.但是在下比较喜欢钻牛角尖.如果不通过2句提示语句输入,而是只有一个提示,让 ...
  1. import java.util.Arrays;
  2. import java.util.Scanner;

  3. public class Demo {

  4.         /**
  5.          * @param args
  6.          */
  7.         public static void main(String[] args) {

  8.                 Scanner in = new Scanner(System.in); // Scanner类
  9.                 String str = null;
  10.                 while (true) {
  11.                         try{
  12.                                 System.out.println("输入字符串:");
  13.                                 str = in.next();
  14.                                 int digit = Integer.parseInt(str);
  15.                                 System.out.println("调用函数输出:" + sort(digit));
  16.                         }catch (Exception e) {
  17.                                 System.out.println("抛出了异常,不是纯数字,调用函数输出:" + sort(str));
  18.                         }
  19.                 }
  20.         }

  21.         public static String sort(String str) {
  22.                 // 字符串倒叙输出
  23.                 return new StringBuilder(str).reverse().toString();
  24.         }

  25.         public static String sort(int digit) {
  26.                 // 整数排序
  27.                 String str = digit + "";
  28.                 char[] chars = str.toCharArray();
  29.                 Arrays.sort(chars);
  30.                 StringBuffer sb = new StringBuffer();
  31.                 for(int i=0;i<chars.length;i++){
  32.                         sb.append(chars[i]);
  33.                 }
  34.                 return sb.toString();
  35.         }
  36. }
  37. 运行:
  38. 输入字符串:
  39. 123wd
  40. 抛出了异常,不是纯数字,调用函数输出:dw321
  41. 输入字符串:
  42. 23435
  43. 调用函数输出:23345
  44. 输入字符串:
复制代码

作者: 卢磊磊    时间: 2016-4-2 22:44
学习了         




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2