代码检测到字符串具有重复的字母,即使它没有

时间:2014-09-12 00:21:20

标签: java loops

我写了一个程序来检查一个单词是否没有任何重复的字母。我遇到两个问题:
1 - 我在面向对象的代码中写了这个,我在调用我的main方法时遇到了问题 2-当我在一个方法中使用代码时 - 没有分解成碎片 - 布尔值没有根据我的checkLetters方法进行更改。无论测试值是多少,输出都是相同的 我是一名java初学者,我很感激任何建议 谢谢!

import java.util.Scanner;

public class uniqueLetters
{
boolean isUnique;
char temp;
int i = 0;
String str;
char[] letters;

public static void main(String[] args)
{
  testWord testing = new testWord();
}   

private void testWord()
{
 getArray();
 checkLetters();
 getStatement();
}

private void getArray()
{
  Scanner keyboard = new Scanner(System.in);
  System.out.println("Please enter your word:");
  str = keyboard.nextLine();
  letters = str.toCharArray();

}

private boolean checkLetters()
{
  boolean isUnique = true;

  for (i = 0; i < letters.length; i++)
  {
     for (int j = 0; j < letters.length; j++)
     {
     if (letters[i] == letters[j])
     isUnique = false;   
     } 

  }
  return isUnique;
}

private void getStatement()
{
if (checkLetters())
  System.out.print("This word has all unique letters");
else 
  System.out.print("This word has duplicate letters");
}

}

1 个答案:

答案 0 :(得分:1)

在循环中你做

for (i = 0; i < letters.length; i++)
{
 for (int j = 0; j < letters.length; j++)
 {
 if (letters[i] == letters[j])
 isUnique = false;   
 break;
 } 

}

但由于第二个循环也是从0开始,因此它总是会找到重复的。

for (i = 0; i < letters.length; i++)
{
 for (int j = i + 1; j < letters.length; j++)
 {
 if (letters[i] == letters[j])
 isUnique = false;   
 } 

}

此外,当您从checkLetters致电getStatement时,您无需通过testWord方法拨打电话。

同样由于testWorld是一个方法而不是一个类,你不应该实例化它,只需要调用它。