A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 胡建伟 于 2014-4-16 23:12 编辑

  1. <P>package com.itheima.com;

  2. import java.util.Scanner;
  3. import java.util.Comparator;
  4. import java.util.Set;
  5. import java.util.TreeSet;
  6. public class Demo {

  7. /**
  8. * 需求: 编写程序,循环接收用户从键盘输入多个字符串,直到输入“quit”时循环结束,并将所有已输入的字符串按字典顺序倒序打印。
  9. *
  10. */
  11. public static void main(String[] args) {
  12. Scanner sc = new Scanner(System.in);
  13. System.out.println("请输入多个字符串,输入end时结束:");
  14. Set<String> ts = new TreeSet<>(new Comparator<String>() {
  15. @Override
  16. public int compare(String str1, String str2) {
  17. int num = str2.compareTo(str1);
  18. return num == 0 ? 1:num; //如果num为零返回一个正数或一个负数,num不为零就
  19. }
  20. });
  21. while(true) { </P>
  22. <P>if(line.equals("quit")) { break; }

  23. try {
  24. String x = String.format(line);
  25. ts.add(x);//将字符串添加到集合
  26. } catch (Exception e) {
  27. System.out.println("您输入的字符非法,请重新输入:");//如果录入非字符串元素就提示
  28. }
  29. }
  30. //增强for循环遍历集合
  31. for (String str : ts) {
  32. System.out.println(str);//将集合中的所有元素打印
  33. }
  34. }

  35. }


  36. </P>
复制代码
问题:1,上述代码中指定输入非法字符即非字符串时候应该给与提示,但是运行结果不成功,没有实现?
          如果输入null,空格,\tab,等该怎么提示,这个异常抛出代码该怎么写呢

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

6 个回复

正序浏览
我用“==quit”难怪不能break~~感谢大神代码~~
回复 使用道具 举报
首先 你的代码无法运行 ,
while(true) { </P>
<P>if(line.equals("quit")) { break; }
这是什么代码  line 是哪里来的
你的键盘输入的字符串存入  set 集合了吗?? 要么就是你的代码不完整。
此为修改后的代码  使用了正则表达式
package test;

import java.util.Scanner;
import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Demo {

        /**
         * 需求: 编写程序,循环接收用户从键盘输入多个字符串,直到输入“quit”时循环结束,并将所有已输入的字符串按字典顺序倒序打印。
         *
         */
        public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);
                System.out.println("请输入多个字符串,输入end时结束:");
                Set<String> ts = new TreeSet<>(new Comparator<String>() {
                        @Override
                        public int compare(String str1, String str2) {
                                int num = str2.compareTo(str1);
                                return num == 0 ? 1 : num; // 如果num为零返回一个正数或一个负数,num不为零就
                        }
                });
                //使用正则表达式除去特殊的字符,如果是特殊字符则不添加
                Pattern p = Pattern.compile("[a-zA-Z0-9]*"); //正则表达式--匹配项
                Matcher m ;//比较器
                while (true) {
                        String line = sc.nextLine();
                        m = p.matcher(line);
                        if(m.matches()){
                                ts.add(line);
                        }else{
                                System.out.println("您输入的字符非法,请重新输入:");// 如果录入非字符串元素就提示
                        }
                        if (line.equals("quite")) {
                                break;
                        }
                }
                // 增强for循环遍历集合
                for (String str : ts) {
                        System.out.println(str);// 将集合中的所有元素打印
                }
        }

}


评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 xtxiaolu 于 2014-4-16 21:48 编辑

/**
         * 5,程序启动后, 可以从键盘输入接收多个整数, 直到输入quit时结束输入. 把所有输入的整数倒序排列打印.
         */
        public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);
                System.out.println("请输入字符串,当输入quit时结束:");
                Set<Integer> set = new TreeSet<>(new Comparator<Integer>() {     //创建一个TreeSet对象,并传入比较器

                        @Override
                        public int compare(Integer a1, Integer a2) {                        //重写compare方法
                                //int nem = a2 - a1;   //也可以这么写但是开发的时候一般用下面的
                                int nem = a2.compareTo(a1);                                        //倒序排列
                                return nem == 0 ? 1 : nem;                        //如果对象为零返回一个整数或负数,nem不为零就放回nem
                        }
                });

                while (true) {                                                //定义一个无限循环
                        String line = sc.nextLine();        //将键盘录入的字符串储存在line内
                        if (line.equals("quit")) {                //如果录入的是quit
                                break;                                                //就跳出循环
                        }

                        try {
                                int x = Integer.parseInt(line);                        //录入的不是quit,将这个数字字符换成数字
                                set.add(x);                                                        //添加到集合中
                        } catch (NumberFormatException e) {
                                System.out.println("您输入的字符是非法字符,请重新输入");   //如果录入的是小数或过大的数提示重新输入
                        }

                }
                for (Integer integer : set) {                        //遍历集合        
                        System.out.println(integer);                //将集合中的所有元素打印
                }

        }



自己建一个class不要建主函数让后拷贝到里面

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
胡建伟 发表于 2014-4-16 21:21
这样肯定不行撒,对于int型,如果输入非int型,就用NumberFormatException,但是对于限定字符串的指定异常,我 ...

我不了解了
回复 使用道具 举报

这样肯定不行撒,对于int型,如果输入非int型,就用NumberFormatException,但是对于限定字符串的指定异常,我就不知是哪个了???????
回复 使用道具 举报
try{
...
}catch(Exception e){
        e.printStackTrace(""您输入的字符非法,请重新输入:"");
}

您这样写试试
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马