Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-基于字母的独立输入_Java_String_Input_Char - Fatal编程技术网

Java-基于字母的独立输入

Java-基于字母的独立输入,java,string,input,char,Java,String,Input,Char,我一直在找这个,但找不到。我想使用Scanner从Java中的用户获取命令移动输入。用户可以输入U(向上)、D(向下)、L(左)、R(右)。因此,例如,如果用户编写UDULR(没有任何内容将它们分开),那么我希望分别阅读字母。我试着这样做: String command; char command; Scanner scan = new Scanner(System.in); System.out.println("Enter commands U(up),D(down),L(left),R(

我一直在找这个,但找不到。我想使用Scanner从Java中的用户获取命令移动输入。用户可以输入U(向上)、D(向下)、L(左)、R(右)。因此,例如,如果用户编写UDULR(没有任何内容将它们分开),那么我希望分别阅读字母。我试着这样做:

String command;
char command;
Scanner scan = new Scanner(System.in);

System.out.println("Enter commands U(up),D(down),L(left),R(right);
//command = scan.next();                       
command = scan.next().charAt(0);

if(command == 'U'){
    "Do this"
}
else if(command == 'D'){
    "Do that"
}

当我使用此代码时,它只识别第一个字母(在本例中,我理解
charAt(0)
表示第一个字母)。但是,如何获得其他输入呢?我尝试了字符串和字符。

您需要将
next()
的结果保存在一个变量中;然后,您可以使用它以您想要的任何顺序获取其中的任何字符。

默认情况下,扫描仪使用一个或多个空格作为分隔符,分隔标记,因此
next
返回表示整个单词的标记,而不是单个字符

如果希望
next
返回单个非空白字符,则可以将分隔符设置为

  • 一系列空白(
    \s+
    在正则表达式中,其中
    \
    需要以字符串形式写入
    “\\\”

  • 空字符串
    “”
但是由于
zero
一个或多个X
zero或多个X
相同,因此我们可以使用表示“零个或多个事件”的
+
,而不是正则表达式中表示“一个或多个事件”的
*
。因此,表示分隔符的正则表达式可能看起来像
\s+
(在字符串文本中,它需要写成
“\\s+”
,因为
\
需要转义)

演示:


根据您的评论,您似乎希望处理作为一个单词传递的一组命令,如
UDULR
,它应该向上、向下、向上、向左、最后向右移动。在这种情况下,您可以像这样组织代码:

private void moveUp(){
    //code for moving up:
    System.out.println("moving up");
}

private void moveDown(){
    //... similar 
}
//rest of moving methods...
现在,您可以再添加一个方法,让我们根据传递给它的字符选择要使用的方法:

public void move(char dirrection){
    switch(dirrection){
       case 'U' : moveUp(); break;
       case 'D' : moveDown(); break;
       case 'L' : moveLeft(); break;
       case 'R' : moveRight(); break;
       default: System.out.println("can't move in dirrection: "+dirrection);
    }
}
现在,在您的代码中,您应该能够使用以下内容:

System.out.println("Enter commands U(up),D(down),L(left),R(right)");
String command = scan.next();

for (char directionCommand : command.toCharArray()){
    move(directionCommand);
}

您可能需要类似scan.next().split(“”)的东西,它将为您提供一个命令数组。然后,您可以循环使用这些命令可能重复的“谢谢您的回答”,但我真的不明白,如何将next()的结果保存在变量中?那么如何从该变量中获取字符呢?您认为command=的作用是什么?您认为charAt(i)做什么?command=look charAt(i)是否与输入相同?“此方法返回位于字符串指定索引处的字符。字符串索引从零开始。“因此,基本上command=将在指定索引中查找字符。0,1,2等等,对吗?charAt()就是这样做的;command=*将“该结果”分配给变量命令。谢谢您的回答。如果用户按下例如UD,那么我想打印两个“做这个”和“做那个”,但在本例中它只打印第一个。我猜可能If语句是错误的??我如何解决?在这种情况下,您希望将其作为word阅读(因此无需更改原始分隔符),只需迭代该单词中的所有字符,并对所有字符执行相应操作。将更新我的答案。@toppen我更新了我的答案。如果不希望这些方法依赖于类的实例,则可以将其设为静态方法。
System.out.println("Enter commands U(up),D(down),L(left),R(right)");
String command = scan.next();

for (char directionCommand : command.toCharArray()){
    move(directionCommand);
}