Java 如何通过扫描器读取同一行的多个字符串,而无需拆分();
Java 如何通过扫描器读取同一行的多个字符串,而无需拆分();,java,string,char,indexof,Java,String,Char,Indexof,.split()方法是不允许的 我早些时候得到了一个乐于助人的人的帮助!我只是想知道是否有人能帮我修改一下 代码是用于分配的,它基于扫描仪的输入。它有两个其他的类,但这是一个有趣的 代码目前正在运行,但是必须输入的东西是**U5、D10**等,它们工作正常。然而,我需要的代码能够读取一行多个字符串,同时分开他们像现在一样。比如说,**D10 U5 L4**,两个玩家中只有一个玩家可以从一条线开始。目前的代码没有将其识别为一行,而是将第二个键入的内容分配给第二个玩家 有什么建议吗 谢谢 impor
.split()方法是不允许的
我早些时候得到了一个乐于助人的人的帮助!我只是想知道是否有人能帮我修改一下
代码是用于分配的,它基于扫描仪的输入。它有两个其他的类,但这是一个有趣的
代码目前正在运行,但是必须输入的东西是**U5、D10**
等,它们工作正常。然而,我需要的代码能够读取一行多个字符串,同时分开他们像现在一样。比如说,**D10 U5 L4**
,两个玩家中只有一个玩家可以从一条线开始。目前的代码没有将其识别为一行,而是将第二个键入的内容分配给第二个玩家
有什么建议吗
谢谢
import java.util.Scanner;
class Asgn2
{
public static void main(String[] args)
{
Scanner scan = new Scanner (System.in);
Player me = new Player("Player1");
Player opponent = new Player("player2");
int startingLoop = 0;
String strA;
int turn =1;
System.out.print("How many turns will the game have: ");
int turnsInGame = scan.nextInt();
System.out.print("How many moves does each player have each turn: ");
int numberOfTurns = scan.nextInt();
for(int i = turnsInGame; startingLoop < i; startingLoop++)
{
System.out.print("Turn " + turn++ + "\n");
System.out.print("Player 1 what are your " + numberOfTurns + " move(s): ");
String userInput = scan.next();
System.out.print("Player 2 what are your " + numberOfTurns + " move(s): ");
String userInputOne = scan.next();
for (int j = 0; j < userInput.length() - 1; j++)
{
char letter = userInput.charAt(j);
String num = "";
for(int k= j + 1; k < userInput.length(); k++)
{
j++;
if(userInput.charAt(k)!=' ')
{
num+=userInput.charAt(k);
}
else
{
break;
}
}
int integer = Integer.parseInt(num + "");
strA = Character.toString(letter);
switch(strA) //For player oneChooses which value to add or subtract from based on what is input.
{
case "U":
me.move(moveSteps.UP , integer);
break;
case "D":
me.move(moveSteps.DOWN, integer);
break;
case "L":
me.move(moveSteps.LEFT, integer);
break;
case "R":
me.move(moveSteps.RIGHT, integer);
break;
}
//Player 2
for (int playerTwo = 0; playerTwo < userInputOne.length() - 1; playerTwo++)
{
char letterTwo = userInputOne.charAt(0);
String numTwo = "";
String strB = Character.toString(letterTwo);
for(int m= playerTwo + 1; m<userInput.length(); m++)
{
playerTwo++;
if(userInputOne.charAt(playerTwo)!=' ')
{
numTwo+=userInputOne.charAt(playerTwo);
}
else
{
break;
}
}
int stepsMoved = Integer.parseInt(numTwo + "");
switch(strB) //For player two
{
case "U":
opponent.move(moveSteps.UP , stepsMoved);
break;
case "D":
opponent.move(moveSteps.DOWN, stepsMoved);
break;
case "L":
opponent.move(moveSteps.LEFT, stepsMoved);
break;
case "R":
opponent.move(moveSteps.RIGHT, stepsMoved);
break;
}
}
}
System.out.print(me);
System.out.print(opponent);
}
}
}
import java.util.Scanner;
Asgn2类
{
公共静态void main(字符串[]args)
{
扫描仪扫描=新扫描仪(System.in);
玩家me=新玩家(“玩家1”);
玩家对手=新玩家(“玩家2”);
int startingLoop=0;
弦斯特拉;
整圈=1;
System.out.print(“游戏有多少回合:”);
int turnsInGame=scan.nextInt();
System.out.print(“每个玩家每回合有多少步:”);
int numberOfTurns=scan.nextInt();
用于(int i=turnsInGame;startingLoop对于(int m=playerTwo+1;m调用方法.nextLine()
,而不是.next()
。我认为这应该可以解决您的问题。将输入分配给字符串后,使用.split()
方法将字符串拆分为数组。使用.split()
,输入要拆分的字符。在本例中为空格。例如,将其用于当前项目:.split(“”)
。拆分后,可以像访问任何数组一样访问它
更新:
首先使用.nextLine()
并将其分配给临时字符串变量。然后
您可以创建另一个扫描程序并在其中放入字符串。例如:
Scanner sc = new Scanner(YOUR TEMPORARY VARIABLE);
现在可以使用.next()
获取单个字符串。这里是Asgn2类
import java.util.Scanner;
public class Asgn2 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.print("What is your name player 1: ");
String p1name = scan.nextLine();
System.out.print("What is your name player 2: ");
String p2name = scan.nextLine();
Player p1 = new Player(p1name);
Player p2 = new Player(p2name);
System.out.print("How many turns will the game have: ");
int numTurns = scan.nextInt();
System.out.print("How many moves does each player have each turn: ");
int numMoves = scan.nextInt();
for (int turn = 1; turn <= numTurns; turn++) {
System.out.println("----------------");
System.out.println("Turn number " + turn);
System.out.println("----------------");
for (int player = 1; player <= 2; player++) {
System.out.print("Player " + player + " what are your " + numMoves + " move(s): ");
for(int move=1;move<=numMoves;move++){
String currMove = scan.next();//splits at space;
char dir = currMove.charAt(0);//gets dir
String temp="";
for(int index=1;index<currMove.length();index++){
temp+=currMove.charAt(index);
}
int dist = Integer.parseInt(temp);
if(player==1){
p1.move(dir, dist);
}else if(player==2){
p2.move(dir, dist);
}
}
System.out.println("Player 1 is at " + p1.getPos() + " and Player 2 is at " + p2.getPos());
System.out.println();
}
}
}
}
在有人说发布代码块对OP没有帮助之前,我和他在聊天室里解释了这件事,所以不要讨厌:)首先阅读Scanner类的next()和nextLine()方法的API文档。@NormR Nvm明白了,我忘了scan.nextLine()了;在我最初的调用之后,现在它只读取第一个值,就像我键入L45和U45一样,它忽略了U45。有什么提示吗?调用nextLine无法修复它,但一行上有多个字符串,我似乎无法访问第二个字符串。当我调用.nextLine()时。它破坏了代码。Woops。我在问题中忘记了它,现在将进行编辑,不允许使用拆分方法。
public class Player {
private String name;
private int locX = 0;
private int locY = 0;
public Player(String name) {
this.name = name;
}
public void move(char dir, int numSteps) {
switch (dir) {
case 'U':
locY += numSteps;
break;
case 'D':
locY -= numSteps;
break;
case 'L':
locX -= numSteps;
break;
case 'R':
locX += numSteps;
break;
}
}
public String getPos() {
return "(" + locX + ", " + locY + ")";
}
public String getName() {
return name;
}
}