2

: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

我尝试了我力所能及的一切(我将 print 替换为 println 并反转,尝试更改问题的顺序等)。

4

4 回答 4

2

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

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

于 2013-11-11T15:09:15.383 回答
1

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

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

链接到 java 文档

于 2013-11-11T15:12:00.933 回答
1

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

您可能会这样想:首先代码执行 System.out.println("What is your name?"); 然后向用户询问使用信息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(),因为这将返回从行首到用户按下回车键(这是一个 '\n' 字符)为止的所有内容。

于 2013-11-11T15:12:21.203 回答
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();
于 2013-11-11T15:08:50.480 回答