黑马程序员技术交流社区

标题: 出现这种结果什么情况?求解? [打印本页]

作者: 王虎    时间: 2012-10-12 22:49
标题: 出现这种结果什么情况?求解?
本帖最后由 王虎 于 2012-10-12 23:54 编辑

要求:1.得到一个字符串,这个字符串是数字与字母的组全
          例如  12,A,54,4,D,8,K,24  它们之间使用,分开.
          其中的数字是100以内随机得到的,字母是A-Z 随机得到的
          一共有100个.
        2.将这个字符串中所有数字取到进行排序,所有字母得到进行排序.
import java.util.*;
class Test5
{
        public static void main(String[] args)
        {
                 //得到一个随机字符串
                String s = getString();
                //显示得到的随机字符串
                System.out.println(s);
                optionString(s);
        }
        
        //将一个StringBuilder中的内容转换成int[]中的元素
        public static int[] stringBuilderToIntArray(StringBuilder sb)
        {
                String[] st = sb.toString().split(",");
                 int[] arr = new int[st.length];
               
                for(int i=0;i<arr.length;i++)
                {
                        arr = Integer.parseInt(st);
                }
                 return arr;
        }
        public static char[] stringBuilderToCharArray(StringBuilder sb)
        {
                String[] st = sb.toString().split(",");
                char[] ch = new char[st.length];
                for(int i=0;i<ch.length;i++)
                {
                        ch= st.charAt(0);
                }
                return ch;
        }
        public static void optionString(String s)
        {
                                
                String[] st =  s.split(","); //随机字符串都是用逗号分开的
                //st数组中就装的是所有的数字与字母
                //用来装数字
                StringBuilder buildNumber = new StringBuilder();
                 //用来装字母
                StringBuilder buildChar = new StringBuilder();
                //下面循环的作用是便利st数组
                for(int i=0;i<st.length;i++)
                {
                        char ch =st.charAt(0);
                        if(ch>'A'&&ch<'Z')
                        {
                                buildChar.append(st).append(",");//所有字母用逗号分开
                        }else{
                                int num = Integer.parseInt(st);
                                buildNumber.append(num).append(",");//所有数字 用逗号分开
                        }                 
                        
                }
               
                                int[]  number        =        stringBuilderToIntArray(buildNumber);
                intSort(number);              
                  for(int i=0;i<number.length;i++)
                {
                        System.out.println(number);
                }
                         char[]  charArray        =        stringBuilderToCharArray(buildChar);
                charSort(charArray);               
                for(int i=0;i<charArray.length;i++)
                {
                        System.out.println(charArray);
                }
        }
               
                //对int数组排序
        public static void intSort(int[] arr)
        {
                //Arrays.sort(arr);               
                for(int x=0;x<arr.length-1;x++)
                {
                        for(int y=x+1;y<arr.length;y++)
                        {
                                if(arr[x]>arr[y])
                                {
                                        int temp =arr[x];
                                        arr[x]=arr[y];
                                        arr[y]= temp;
                                }
                        }
                }
        }
                //对char数组排序
        public static void charSort(char[] ch)
        {
                //Arrays.sort(ch);               
                for(int x=0;x<ch.length-1;x++)
                {
                        for(int y=1;y<ch.length-1-x;y++)
                        {
                                if(ch[x]>ch[y])
                                {
                                        char temp =ch[y];
                                        ch[y]=ch[y+1];
                                        ch[y+1]= temp;
                                }
                        }
                }
        }        
               
               
        //得到一个数字与字母的组的字符串
        public static String getString()
        {
                //String s="";
                Random ran = new Random();
                StringBuilder build = new StringBuilder();
                for(int i=0;i<10;i++)
                {
                                 //随机得到一个数判断是否是偶数,如果是偶数得到一个字符.
                        if(ran.nextInt()%2==0)
                        {
                                int num = ran.nextInt(100);      
                                build = build.append(num).append(",");
                        }else{
                                char ch=(char)(ran.nextInt(26)+'A');
                                build = build.append(ch).append(",");
                        }
                                
                      }
                return         build.deleteCharAt(build.length()-1).toString();               
        }
        
}

控制台输出结果:
32,13,J,30,Q,79,A,Z,T,41
Exception in thread "main" java.lang.NumberFormatException: For input string: "A
"
        at java.lang.NumberFormatException.forInputString(NumberFormatException.
java:48)
        at java.lang.Integer.parseInt(Integer.java:449)
        at java.lang.Integer.parseInt(Integer.java:499)
        at Test5.optionString(Test5.java:119)
        at Test5.main(Test5.java:42)



当我调用调用默认的函数时显示是正常的,但是一调用我自己写的方法时第一次结果没事,在运行一次就出现
这个情况,关键是这个让我很不理解“NumberFormatException”时我写的排序方法有问题还是??哪位大神帮忙解决下

作者: 王虎    时间: 2012-10-12 23:14
我的机子上没问题、就是调用了自己写的排序方法时时出现了上述错误,咋也想不通、
作者: 唐增友    时间: 2012-10-12 23:18
         /*
                                因为parseInt方法在操作时,如果不能进行转换会抛出异常
                        */
                        /*
                        try{
                                int num=Integer.parseInt(st);
                                        b1.append(num).append(",");
                        }catch(NumberFormatException e){
                                b2.append(st).append(",");
                        }*/
                        char ch =st.charAt(0);
                        if(ch>='A'&&ch<='Z')//改成大于等于 和 小于等于
                        {
                                buildChar.append(st).append(",");//所有字母用逗号分开
                        }else{
                                int num = Integer.parseInt(st);
                                buildNumber.append(num).append(",");//所有数字 用逗号分开
                        }                 
                        
                }
作者: 唐增友    时间: 2012-10-12 23:20
N多地方要给字符串 加下标 下面是其中一个
ch= st.charAt(0);
作者: 谭立文    时间: 2012-10-12 23:20
本帖最后由 谭立文 于 2012-10-12 23:23 编辑

package com.wenfengkeji.heima;

import java.util.*;

/*
* 要求:1.得到一个字符串,这个字符串是数字与字母的组全
例如  12,A,54,4,D,8,K,24  它们之间使用,分开.
其中的数字是100以内随机得到的,字母是A-Z 随机得到的
一共有100个.
2.将这个字符串中所有数字取到进行排序,所有字母得到进行排序.

*/
感觉你的弄得太复杂了,每个人思路都不一样,这是我刚写的。
class Demo18 {
        public static void main(String[] args) {
                // 得到一个随机字符串
                String s = getString();
                // 显示得到的随机字符串
                System.out.println(s);
                split(s);
        }

        private static void split(String s) {
                TreeSet<Character> ts_char = new TreeSet<Character>();
                TreeSet<Character> ts_number = new TreeSet<Character>();
                for(int i = 0;i < s.length(); i++)
                {
                        char data = s.charAt(i);
                        if(data == ',')
                                continue;
                        if('a'<= data && data<='z'||'A'<=data&&data<='Z')
                        {
                                ts_char.add(new Character(data));   //虽然java1.5之后提供了自动装箱与拆箱 但是我认为显示的去做转换比让系统为你隐式的去做 效率要高 个人的一点看法
                        }
                        else
                        {
                                ts_number.add(new Character(data));//这里也是一样
                        }
                }
                System.out.println(ts_char);
                System.out.println(ts_number);
        }

        public static String getString() {
                Random ran = new Random();
                StringBuilder build = new StringBuilder();
                for (int i = 0; i < 10; i++) {
                        if (ran.nextInt() % 2 == 0) {
                                int num = ran.nextInt(100); // s+=n+",";
                                build = build.append(num).append(",");
                        } else {
                                char ch = (char) (ran.nextInt(26) + 'A');
                                build = build.append(ch).append(",");
                        }
                }
                return build.deleteCharAt(build.length() - 1).toString();
        }

}

作者: 唐增友    时间: 2012-10-12 23:21
貌似没有得出题目的答案
这是你的结果:
U,24,Q,72,84,D,39,95,C,C
[I@1d5550d
[I@1d5550d
[I@1d5550d
[I@1d5550d
[I@1d5550d
[[[[[
[[[[[
[[[[[
[[[[[
[[[[[
作者: 唐增友    时间: 2012-10-12 23:26
唐增友 发表于 2012-10-12 23:21
貌似没有得出题目的答案
这是你的结果:
U,24,Q,72,84,D,39,95,C,C

不是版主大人你的
是楼主的代码执行后的结果




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