如何解决这个阵列问题

所以我在java编程课中学习数组,并且我得到了一个对我来说非常具有挑战性的程序。我必须编写一个程序,其中包含一系列行的输入文件,每行一个单词。我必须编写一个程序,告诉用户该单词是否使用不同的字母(重复的字母)。

这是我的输入文件:

UNCOPYRIGHTABLE
FLIPPER
EXECUTABLE
UNPROFITABLE
QUESTIONABLE
WINDOW
TAMBOURINE

这就是我现在所拥有的:

Scanner df = new Scanner (new Files (distinctlet.in"));while (df.hasNextLine()){
  String line = df.nextLine();
  String array [] = line.split("");

  String ans = "";for (int k = 0; k < array.length; k++){

  for (int m = k + 1; m < array.length; m++)
  {
      if (!array[k].equals(array[m])
      {
        ans = "USES DISTINCT LETTERS";
      }
      else
      {
        ans = "DOES NOT USE DISTINCT LETTERS";
      }

   }//FOR LOOP2}//FOR LOOPSystem.out.println(line + " " + ans);}//WHILE DF

我的输出应该是:

UNCOPYRIGHTABLE USES DISTINCT LETTERS
FLIPPER DOES NOT USE DISTINCT LETTERS
EXECUTABLE DOES NOT USE DISTINCT LETTERS

等等...

我现在的输出是每一行的输入和“不要使用独特的字母”。我知道问题是在嵌套循环中,但我不知道如何解决这个问题。感谢您的帮助。


慕斯王
浏览 487回答 5
5回答

慕勒3428872

您可以使用字符位置来确定它是否存在于字符串中的其他位置。考虑以下解决方案:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(df.hasNextLine())&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;line&nbsp;=&nbsp;df.nextLine(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;array[]&nbsp;=&nbsp;line.split(""); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;ans&nbsp;=&nbsp;"USES&nbsp;DISTINCT&nbsp;LETTERS"; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;k&nbsp;=&nbsp;0;&nbsp;k&nbsp;<&nbsp;array.length;&nbsp;k++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(line.indexOf(array[k])&nbsp;!=&nbsp;line.lastIndexOf(array[k])){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans&nbsp;=&nbsp;"DOES&nbsp;NOT&nbsp;USE&nbsp;DISTINCT&nbsp;LETTERS"; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}//FOR&nbsp;LOOP &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(line&nbsp;+&nbsp;"&nbsp;"&nbsp;+&nbsp;ans); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}//WHILE&nbsp;DF

婷婷同学_

要解决这类问题,这个解决方案可以很容易地解决你的问题,但这里我们只是采用一个256长度数组的常量空间complexity will be O(n):int&nbsp;[]star&nbsp;=&nbsp;new&nbsp;int[256]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(df.hasNextLine()) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Arrays.fill(star,0); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;line&nbsp;=&nbsp;df.nextLine(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i=0;i<line.length();i++){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;star[line.charAt(0)]++; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i=0;i<256;i++){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(star[i]>0&nbsp;&&&nbsp;star[i]>1){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("Duplicate&nbsp;characters&nbsp;present.."); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("No&nbsp;Duplicate&nbsp;characters&nbsp;present.."); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}我希望你有个主意..

守着星空守着你

就个人而言,我不会使用数组来做到这一点 - 我会使用地图。即使你必须使用数组,我仍然会以地图的精神解决这个问题。这里的counter数组就像一个map(key = index,value = count)。public&nbsp;class&nbsp;Test&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;throws&nbsp;IOException&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;byte[]&nbsp;encoded&nbsp;=&nbsp;Files.readAllBytes(Paths.get("data/input.csv")); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;s&nbsp;=&nbsp;new&nbsp;String(encoded,&nbsp;Charset.defaultCharset()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String[]&nbsp;split&nbsp;=&nbsp;s.split("\n"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("Input:&nbsp;"&nbsp;+&nbsp;Arrays.toString(split)); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("Output:&nbsp;"&nbsp;+&nbsp;Arrays.toString(check(split))); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;String[]&nbsp;check(String[]&nbsp;strings)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;strings.length;&nbsp;i++) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strings[i]&nbsp;+=&nbsp;distinct(strings[i]) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?&nbsp;"&nbsp;USES&nbsp;DISTINCT&nbsp;LETTERS" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;"&nbsp;DOES&nbsp;NOT&nbsp;USE&nbsp;DISTINCT&nbsp;LETTERS"; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;strings; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;boolean&nbsp;distinct(String&nbsp;string)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int[]&nbsp;counter&nbsp;=&nbsp;new&nbsp;int[string.length()]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(char&nbsp;c&nbsp;:&nbsp;string.toCharArray()) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(++counter[string.indexOf(c)]&nbsp;>&nbsp;1)&nbsp;return&nbsp;false; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;true; &nbsp;&nbsp;&nbsp;&nbsp;}}Input: [UNCOPYRIGHTABLE, FLIPPER, EXECUTABLE, UNPROFITABLE, QUESTIONABLE, WINDOW, TAMBOURINE]Output: [UNCOPYRIGHTABLE USES DISTINCT LETTERS, FLIPPER DOES NOT USE DISTINCT LETTERS, EXECUTABLE DOES NOT USE DISTINCT LETTERS, UNPROFITABLE USES DISTINCT LETTERS, QUESTIONABLE DOES NOT USE DISTINCT LETTERS, WINDOW DOES NOT USE DISTINCT LETTERS, TAMBOURINE USES DISTINCT LETTERS]

慕姐4208626

for (int k = 0; k < array.length; k++){&nbsp; for (int m = k + 1; m < array.length; m++)&nbsp; {&nbsp; &nbsp; &nbsp; if (!array[k].equals(array[m])&nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; ans = "USES DISTINCT LETTERS";&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; else&nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; ans = "DOES NOT USE DISTINCT LETTERS";&nbsp; &nbsp; &nbsp; &nbsp; // Break out of the two loops once you know the characters are matching.&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; //Otherwise it loops again and the last match of character is what you get the ans.&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp;}//FOR LOOP2}//FOR LOOP
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java