: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代替打印并反转,尝试更改问题的顺序等等。)。
答案 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...
答案 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'字符)。