Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.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_Char_Indexof - Fatal编程技术网

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;
    }
}