大家帮我看下下面的这个程序,我要实现的是 从键盘输入一串字符 删除重复的字符...输出
看看我这样写,逻辑上有没有错误....
事实上,输出结果台奇怪了,大家帮帮改改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();
}
}
看看我这样写,逻辑上有没有错误....
事实上,输出结果台奇怪了,大家帮帮改改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();
}
}
是不是应该把这句话放在循环的外面
加上!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();
}
}
{
if(String.valueOf(s1.charAt(i)).equals(String.valueOf(s1.charAt(j))))
s1.deleteCharAt(j);
else j++;
System.out.println(s1);
}
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))
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);
}
大部分可以 不过:
你运行下 jkjkLLLL
输出的结果: jk能解释下吗?
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();
}
}
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
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
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();
}
}
可以了。不过我还知道下,它的线路问题....
比如,我输入 sdsdllll我把 System.out.println(s1); 放到第二个循环里了结果如下:能解释下么?
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();
}
}
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();
}
}
你给的东西貌似不行啊。
不知道你自己运行过没?
输入: sdsdddll输出:sddl....-_-#
如:输入:sdsdllll
输出:sdll
看了过程好郁闷 为什么不是每层递减而是哪种样子,一头雾水!!
请 23 楼解释下 thank
运行过程:
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
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();
}
}
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();
}
}
程序员在深圳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
——————————————————————————————————————————
希望大家不要认为群能给你带来什么,这只是一个平台,让同等水平的程序员有个交流的机会或许能得到一点信息或许能带来一点启发。*****************************************************************************
改法个这位兄弟的一样 j--;
另:那个set的容器用法也不错