当多个单词输入时代码失败

时间:2013-11-11 15:04:54

标签: java

:D我完全不熟悉Java,现在我正在做基本的例子(使用Java 1.7和Eclipse IDE)

我已经尝试了下面的代码。它应该接受用户输入,最后显示它们。

package loop;
import java.util.Scanner;

public class MainClass {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner user_input = new Scanner( System.in );

    String name;
    System.out.print("What is yout name?: ");
    name = user_input.next();

    String quest;
    System.out.print("What is your quest?: ");
    quest = user_input.next();

    String color;
    System.out.print("What is your favourite color?: ");
    color = user_input.next();

    String sentence;
    sentence = "Your name is" + " " + name + " " + ",and your quest is" + " " + quest + " " + ",and your favourite color is" + " " + color;

    System.out.println(sentence);





    }

}

当我只使用一个单词输入时,一切正常,

What is yout name?: Marko
What is your quest?: seeking
What is your favourite color?: green
Your name is Marko ,and your quest is seeking ,and your favourite color is green

但是所有内容都失败了多个单词:

What is yout name?: Marko Scekic
What is your quest?: What is your favourite color?: seeking blue
Your name is Marko ,and your quest is Scekic ,and your favourite color is seeking

What is yout name?: Marko
What is your quest?: seeking for Holy grail
What is your favourite color?: Your name is Marko ,and your quest is seeking ,and your favourite color is for

我尝试了所有权力(我用println代替打印并反转,尝试更改问题的顺序等等。)。

4 个答案:

答案 0 :(得分:2)

正如Reimeus先前所说,你应该使用user_input.nextLine();

这将读取整行,并将读取所有内容,直到找到\ n,这意味着新行,在您的情况下用户点击进入。

答案 1 :(得分:1)

您最好使用BufferedReader

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String line = bufferedReader.readLine();

获取输入:

例如:

BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));

String name;
System.out.print("What is yout name?: ");
name = bufferedReader.readLine();

答案 2 :(得分:1)

如果您想使用扫描仪,则需要使用扫描仪中的nextLine()方法来获取整条线。它读取包括空格在内的整行。现在使用next()方法只读取直到第一个空格然后停止。

String name;
System.out.print("What is yout name?: ");
name = user_input.nextLine();
//etc...

Link to java doc

答案 3 :(得分:1)

扩展Reimeus所说的内容:Scanner.next()从扫描仪返回下一个令牌。基本上,它将空格视为标记之间的分隔符,这意味着“Marko Scekic”是两个不同的标记:“Marko”是第一个,而“Scekic”是第二个。

您可能会这样想:首先代码执行System.out.println(“您叫什么名字?”);然后使用next()向用户询问相关信息,然后使用System.out.println()打印其他内容,这样next()似乎应该提供两个println()调用之间输入的所有内容。

不幸的是,Scanner类根本不知道是否调用了System.out.println()。从它的角度来看,以下几点完全相同:

String name;
System.out.print("What is yout name?: ");
name = user_input.next();

String quest;
System.out.print("What is your quest?: ");
quest = user_input.next();

String name;
name = user_input.next();

String quest;
quest = user_input.next();

换句话说,使用System.out.println()打印内容对next()的内容没有影响。

所以你需要使用与Scanner不同的东西,或者像Reimus所说的那样,使用nextLine(),因为这将返回从行的开头到用户点击输入点的所有内容key('\ n'字符)。