大家帮我看下下面的这个程序,我要实现的是  从键盘输入一串字符  删除重复的字符...输出
看看我这样写,逻辑上有没有错误....
事实上,输出结果台奇怪了,大家帮帮改改import java.io.*;
public class Buf{
String s;
StringBuffer s1;
int i=0,j=0;
public Buf(){
In();

}
public void In(){
try{
BufferedReader buf=new BufferedReader(new InputStreamReader (System.in));
  s= buf.readLine();
  s1=new StringBuffer(s);
  for(i=0;i<=s1.length()-1;i++)
  {
  for(j=i+1;j<=s1.length()-1;j++)
    {
     if(String.valueOf(s.charAt(i)).equals(String.valueOf(s.charAt(j))))
     s1.deleteCharAt(j);
     System.out.println(s1);
    }
  }
   
    }
catch(IOException e){}
}

public static void main(String args[]){
new Buf();
}
}

解决方案 »

  1.   

    System.out.println(s1); 
    是不是应该把这句话放在循环的外面
      

  2.   

    我忘记  输出结果了。
    加上!import java.io.*;
    public class Buf{
    String s;
    StringBuffer s1;
    int i=0,j=0;
    public Buf(){
    In();

    }
    public void In(){
    try{
    BufferedReader buf=new BufferedReader(new InputStreamReader (System.in));
      s= buf.readLine();
      s1=new StringBuffer(s);
      for(i=0;i<=s1.length()-1;i++)
      {
      for(j=i+1;j<=s1.length()-1;j++)
        {
         if(String.valueOf(s.charAt(i)).equals(String.valueOf(s.charAt(j))))
         s1.deleteCharAt(j);
        
        }
      }
      System.out.println(s1);
       
        }
    catch(IOException e){}
    }

    public static void main(String args[]){
    new Buf();
    }
    }
      

  3.   

    答:程序中代码修改如下就行了:for(j=i+1;j <=s1.length()-1;) 
        { 
         if(String.valueOf(s1.charAt(i)).equals(String.valueOf(s1.charAt(j)))) 
         s1.deleteCharAt(j); 
         else j++;
          
         System.out.println(s1); 
        } 
      

  4.   

    答:你的代码有两处错误:
    1)里层循环s.charAt(..)要改为:s1.charAt(..)
    2)j++放到现在的位置。原因是:StringBuffer每改一次,长度就变化一次,字符位置向前移动一个。
    3)建议:1)用StringBuilder来代替StringBuffer,性能高些,用法相同。
         2) if(String.valueOf(s1.charAt(i)).equals(String.valueOf(s1.charAt(j)))) 代码可直接写成:if(s1.charAt(i)==s1.charAt(j))
      

  5.   


        public void doSomething(String s){
            char[] chars = s.toCharArray();
            ArrayList<Character> list = new ArrayList<Character>();
            for(char c:chars){            
                if(!list.contains(c)){
                    list.add(c);
                }
            }
            for(char c:list)
                System.out.print(c);
        }
      

  6.   

    5楼的  按你的改法我试了下
    大部分可以  不过:
                       你运行下   jkjkLLLL
                    输出的结果:    jk能解释下吗?
      

  7.   


    package zhao;import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;public class Buf{    String s;    StringBuffer s1;    int i = 0, j = 0;    public TestCalendar() {
            Buf();    }    public void In() {
            try {
                BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
                s = buf.readLine();
                s1 = new StringBuffer(s);
                for (i = 0; i <= s1.length() - 1; i++) {
                    for (j = i + 1; j <= s1.length() - 1; j++) {
                        if (String.valueOf(
                            s.charAt(i)).equals(
                            String.valueOf(s.charAt(j))))
                            s1.deleteCharAt(j);
                    }
                }
                System.out.println(s1); // 写到最后!        } catch (IOException e) {
            }
        }    public static void main(String args[]) {
            new Buf();
        }
    }
      

  8.   

    答:可以。结果是:
    jkjkLLLL 
     jkjkLLLL 
     jkjkLLLL 
     jkjkLLLL 
     jkjkLLLL 
     jkjkLLLL 
     jkjkLLLL 
     jkjkLLLL 
     jkjkLLLL 
     jkjkLLLL
     jkjkLLLL
     jkkLLLL
     jkkLLLL
     jkkLLLL
     jkkLLLL
     jkkLLLL
     jkkLLLL
     jkLLLL
     jkLLLL
     jkLLLL
     jkLLLL
     jkLLLL
     jkLLL
     jkLL
     jkL
      

  9.   

    答:你的代码,我只改了上述两处,紧扣你的代码,不大动代码import java.io.*; 
    public class Buf{ 
    String s; 
    StringBuffer s1; 
    int i=0,j=0; 
    public Buf(){ 
    In(); } 
    public void In(){ 
    try{ 
    BufferedReader buf=new BufferedReader(new InputStreamReader (System.in)); 
      s= buf.readLine(); 
      s1=new StringBuffer(s); 
      for(i=0;i <=s1.length()-1;i++) 
      { 
      for(j=i+1;j <=s1.length()-1;) 
        { 
         if(String.valueOf(s1.charAt(i)).equals(String.valueOf(s1.charAt(j)))) 
         s1.deleteCharAt(j); 
         else j++;
          
         System.out.println(s1); 
        } 
      } 
        
        } 
    catch(IOException e){} 
    } public static void main(String args[]){ 
    new Buf(); 


    输入:jkjkLLLL 
    输出:
    jkjkLLLL 
     jkjkLLLL 
     jkjkLLLL 
     jkjkLLLL 
     jkjkLLLL 
     jkjkLLLL 
     jkjkLLLL 
     jkjkLLLL 
     jkjkLLLL
     jkjkLLLL
     jkkLLLL
     jkkLLLL
     jkkLLLL
     jkkLLLL
     jkkLLLL
     jkkLLLL
     jkLLLL
     jkLLLL
     jkLLLL
     jkLLLL
     jkLLLL
     jkLLL
     jkLL
     jkL
      

  10.   

    可以用Set容器做,它会自动删除重复的字符,见下面:import java.io.*;
    import java.util.*;public class Buf {
    String s;
    StringBuffer s1;
    int i = 0, j = 0; public Buf() {
    In(); } public void In() {
    try {
    BufferedReader buf = new BufferedReader(new InputStreamReader(
    System.in));
    s = buf.readLine();
    char[] a = s.toCharArray();
    Set<Character> sets = new LinkedHashSet<Character>();
    for (int i = 0; i < a.length; i++)
    sets.add(a[i]);
    for (char c : sets)
    System.out.print(c);
    } catch (IOException e) {
    }
    } public static void main(String args[]) {
    new Buf();
    }
    }
      

  11.   

    7楼的,按你说的  改了 s1.charAt()
    可以了。不过我还知道下,它的线路问题....
      
    比如,我输入  sdsdllll我把  System.out.println(s1); 放到第二个循环里了结果如下:能解释下么?
      

  12.   

    可以用Set容器实现,它会自动删除重复的字符,见下面代码:import java.io.*;
    import java.util.*;public class Buf {
    String s;
    StringBuffer s1;
    int i = 0, j = 0; public Buf() {
    In(); } public void In() {
    try {
    BufferedReader buf = new BufferedReader(new InputStreamReader(
    System.in));
    s = buf.readLine();
    char[] a = s.toCharArray();
    Set<Character> sets = new LinkedHashSet<Character>();
    for (int i = 0; i < a.length; i++)
    sets.add(a[i]);
    for (char c : sets)
    System.out.print(c);
    } catch (IOException e) {
    }
    } public static void main(String args[]) {
    new Buf();
    }
    }
      

  13.   

    代码逻辑有错误,我调整了一下import java.io.*;public class tt {
      String s;  StringBuffer s1;  int i = 0, j = 0;  public tt() {
        In();
      }  public void In() {
        try {
          BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
          s = buf.readLine();
          s1 = new StringBuffer(s);
          for (i = 0; i < s1.length(); i++) {
    //        System.out.println("###"+i);
            for (j = i + 1; j < s1.length(); j++) {
              if (s1.charAt(i)==s1.charAt(j))
                s1.deleteCharAt(j);
    //          System.out.println(s1);
            } 
          }
          System.out.println(s1);
        } catch (IOException e) {}
      }  public static void main(String args[]) {
        new tt();
      }
    }
      

  14.   

    19楼的老大~
    你给的东西貌似不行啊。
    不知道你自己运行过没?
    输入: sdsdddll输出:sddl....-_-#
      

  15.   

    答:读一下你的程序,感觉就有错误在其中。测试一下,果然如此。
    如:输入:sdsdllll
    输出:sdll
      

  16.   

    答:你把System.out.println(s1);放到两重循环的外面,不就行了。放到里面,你可能是为了观察运行过程吧。
      

  17.   

    是啊  我就是想观察过程的。
    看了过程好郁闷  为什么不是每层递减而是哪种样子,一头雾水!!
    请  23 楼解释下  thank
      

  18.   

    答:以:sdsdllll为例:
    运行过程:
    i=0 j=1 串结果:sdsdllll
    i=0 j=2 串结果:sddllll
    i=0 j=2 串结果:sddllll
    i=0 j=3 串结果:sddllll
    i=0 j=4 串结果:sddllll
    i=0 j=5 串结果:sddllll
    i=0 j=6 串结果:sddllll
    i=1 j=2 串结果:sdllll
    i=1 j=2 串结果:sdllll
    i=1 j=3 串结果:sdllll
    i=1 j=4 串结果:sdllll
    i=1 j=5 串结果:sdllll
    i=2 j=3 串结果:sdlll
    i=2 j=3 串结果:sdll
    i=2 j=3 串结果:sdl
      

  19.   

    import java.io.*;public class tt {
      String s;  StringBuffer s1;  int i = 0, j = 0;  public tt() {
        In();
      }  public void In() {
        try {
          BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
          s = buf.readLine();
          s1 = new StringBuffer(s);
          for (i = 0; i < s1.length(); i++) {        for (j = i + 1; j < s1.length(); j++) {
              if (s1.charAt(i)==s1.charAt(j))
              {
               s1.deleteCharAt(j);
               j=j-1;   //加一句,因为删掉一个字符的话,j的位置会变
              }
            } 
          }
          System.out.println(s1);  //这个移到外面
        } catch (IOException e) {}
      }  public static void main(String args[]) {
        new tt();
      }
    }
      

  20.   


    import java.io.*;class Buf {
    String s;
    StringBuffer s1;
    public Buf() {
    In();
    }
    public void In() {
    try {
    BufferedReader buf = new BufferedReader(new InputStreamReader(
    System.in));
    s = buf.readLine();
    s1 = new StringBuffer(s);
    for (int i = 0; i <= s1.length() - 1; i++) {
    for (int j = i + 1; j <= s1.length() - 1; ) {
    if (s.charAt(i)==s.charAt(j))
    s1.deleteCharAt(j);
    else
    j++;
    System.out.println(s1);
    }
    } } catch (IOException e) {
    e.printStackTrace();
    }
    }
    public static void main(String args[]) {
    new Buf();
    }
    }
      

  21.   

    ***************************************************************************思想决定行动,加入程序员在深圳QQ群,参加技术思想碰撞专业分类:
    程序员在深圳JAVA群4247660
    程序员在深圳c++群15195967
    程序员在深圳.NET群Ⅱ:12203296
    程序员在深圳TCP/IP协议栈开发:16956462
    程序员在深圳JS & AJAX群:12578377
    程序员在深圳英语学习群:23864353
    深序员在深圳VB:11055959
    程序员在深圳c++Ⅱ17409451
    程序员在深圳c++群15195967
    程序员在深圳嵌入式开发群37489763
    程序员在深圳移动开发群31501597
    程序员在深圳创业群33653422不限专业分类:
    高级群:17538442
    第三群:2650485
    第五群:29537639
    第四群:28702746
    第六群:10590618
    第七群:10543585
    第八群:12006492
    第九群:19063074
    第十群:2883885
    第十一群:25460595
    第十二群:9663807深圳程序员QQ群联盟成立两年多,拥有三十个以上的QQ群,人数达二千多人,有30%以上的成员的经验丰富的老手,包括国内外顶级大公司的成员(如微软、IBM,SUN,华为)、国内著名高校和研究院成员,和有丰富实践经验的高级程序(包括参加过上亿元的项目的架构师),有很热爱技术的成员(包括自己写过嵌入式操作系统),还有少数女程序员。现推介如下QQ群,如有兴趣速速加入:深程高级群I:17538442 深程高级群II:7120862 (深程高级群不欢迎新手,如果在深圳,月薪6K以下的别加入) c++:15195967 .NET:12203296 mobile:31501597嵌入式:37489763 JAVA:4247660  
    —————————————————————————————————————————— 
    希望大家不要认为群能给你带来什么,这只是一个平台,让同等水平的程序员有个交流的机会或许能得到一点信息或许能带来一点启发。*****************************************************************************
      

  22.   


    改法个这位兄弟的一样 j--;
    另:那个set的容器用法也不错