2017-05-26 248 views
1

我想写一个程序,读取用户的单词,直到他们输入单词“quit”,在这一点上,它打印出他们在一行中输入的所有单词,用逗号分隔。如何将字符串输入循环到字符串数组然后输出?

我以前得到的最后一个用户输入(退出)只输出,但现在我迷路了。帮帮我。有一些注释掉的代码。谢谢。我是Java新手,但知道C/C++和UE4。

public static void main(String[] args) { 
    java.util.Scanner scanner = new java.util.Scanner(System.in); 
    String[] array = new String[1000]; 

    for (int i=1; i>0; i++) { 
     System.out.print("Enter string: "); 
     array[i] = scanner.nextLine(); 

     if (array.equals("quit")) { 
      System.out.println(array); 
      break; 
     } 
    } 
} 
+2

如果你想循环运行直到用户输入'quit',你需要'array [i] .equals(“quit”)'和循环有问题 –

+0

,最好使用while循环而不是制作一个无限循环。 –

+0

您可能想使用'System.out.println(Arrays.toString(array))'代替。 – bradimus

回答

0

你忘了展现排列的指标,你也需要改变退出:

if (array[i].equals("quit")) { 
     System.out.println(Arrays.toString(array)) 
     break; 
    } 
+0

您可能想使用'System.out.println(Arrays.toString(array))'代替。 – bradimus

+0

是的,你是对的!谢谢 –

4
  1. 我会建议使用收集ArrayList而不是规则排列的。所以你不必担心尺寸。
  2. 创建一个无限循环
  3. 常量应始终位于比较的左侧。在这种特殊情况下,line不是可空的,但这是一个很好的习惯。

最终的代码看起来就像这样:

public static void main(String[] args) { 
    Scanner scanner = new Scanner(System.in); 
    List<String> buffer = new ArrayList<>(); 
    while (true) { 
     System.out.print("Enter string: "); 
     String line = scanner.nextLine(); 
     if ("quit".equals(line)) { 
      break; 
     } 
     buffer.add(line); 
    } 
    System.out.println(buffer); 
} 

希望它能帮助!

P.S.如果您想要在if声明前移动buffer.add(line);,则不会在最后打印“退出”。

+0

做while循环可能会稍微好一点。他还要求以逗号分隔的字符串,否则很好的答案 –

1
import java.util.ArrayList; 
import java.util.Scanner; 

public class Main { 

public static void main(String[] args) { 

    Scanner keyboard= new Scanner(System.in); 
    String word=null; 
    ArrayList<String> words= new ArrayList<String>(); 
    do{ 
     System.out.print("Type your word: "); 
     word=keyboard.next(); 
     if(word.equalsIgnoreCase("Quit")) break; 
     words.add(word); 
    }while(true); 


    System.out.println("You typed: "); 
    for(String w: words){ 
     System.out.print(w+","); 
    } 

} 

} 

你不知道循环的数量,所以你需要“while”而不是“for”。 如果用户键入退出它停止。如果不是,则将此字添加到ArrayList中。 最后,遍历此ArrayList并用逗号打印所有单词。

+0

这会在列表的末尾添加一个逗号。您可能想尝试java8的StringJoiner类 –

0

我建议您使用名为TextIO的类,它可以找到here。这个类有使你的问题更容易的方法。首先介绍一下:

TextIO是一个在TextIO读取一些文本后立即向前移动的控件指针的类。例如。如果用户输入字符串:

Hello World 

然后默认的指针位置将是文本的开始位置。如果您运行的语句:

String str = TextIO.getWord(); 

str将包含字符串Hello现在的指针位置将是正确的在Hello面前。现在再次调用其他方法时,TextIO将返回从当前指针位置开始的输出。


来到你的问题了,TEXTIO包含方法peek(),可返回仅领先指针位置不改变指针位置的字符。如果要预先确定文本中的下一个字符(所需字符在您的案例中为逗号),这非常有用。 这是你会怎么做编码:

ArrayList<String> array = new ArrayList<String>(); 
while(true){ 
    TextIO.skipWhiteSpace();//Skips any white space(blacks, carriage returns etc.) that may be preceding your next word. 
    String str = TextIO.getWord(); 
    if (str.equalsIgnoreCase("quit")){ 
     break;} 
    if(TextIO.peek() != ','){ 
     ...Show error message... 
     break; 
    } 
    TextIO.getChar();//Skip the comma that is the next character 
    array.add(str); 
} 

我希望帮助!