如何通过扫描仪从同一行读取多个字符串无Split(); [英] How to read multiple Strings off the same line via the scanner Without Split();

查看:120
本文介绍了如何通过扫描仪从同一行读取多个字符串无Split();的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

.split()方法不允许



我从一个有用的人那里得到了一些帮助!我只是想知道是否有人可以帮助我修改这一点,



代码是为一个分配,它是基于来自扫描仪的输入。它有两个其他类,但这是一个感兴趣的。



代码在工作,但是必须输入的东西是像** U5,D10 ** 等工作正常。然而,我需要代码能够读取多个字符串关闭一行,同时分离他们像现在。比如说 ** D10 U5 L4 ** ,从一行只有一个球员两个。



有没有提示?



感谢

  import java.util.Scanner; 

class Asgn2
{
public static void main(String [] args)
{
扫描器扫描=新扫描器(System.in);

Player me = new Player(Player1);
Player opponent = new Player(player2);

int startingLoop = 0;
String strA;
int turn = 1;

System.out.print(游戏有多少轮次:);
int turnsInGame = scan.nextInt();

System.out.print(每个玩家每回合有多少动作:);
int numberOfTurns = scan.nextInt();



for(int i = turnsInGame; startingLoop< i; startingLoop ++)
{
System.out.print(Turn+ turn ++ +\\\
);

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 ;
String num =;


for(int k = j + 1; k {
j ++;
if(userInput.charAt(k)!='')
{
num + = userInput.charAt(k);
}
else
{
break;
}
}
int integer = Integer.parseInt(num +);
strA = Character.toString(letter);

switch(strA)//对于播放器oneChooses根据输入内容添加或减去哪个值。
{

caseU:

me.move(moveSteps.UP,integer);
break;

caseD:

me.move(moveSteps.DOWN,integer);
break;

caseL:

me.move(moveSteps.LEFT,integer);
break;

caseR:

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)//对于玩家2
{

caseU:

opponent.move(moveSteps.UP,stepsMoved);
break;

caseD:

opponent.move(moveSteps.DOWN,stepsMoved);
break;

caseL:

opponent.move(moveSteps.LEFT,stepsMoved);
break;

caseR:

opponent.move(moveSteps.RIGHT,stepsMoved);
break;
}


}
}





System.out .print(me);

System.out.print(opponent);






}
}
}


解决方案

这里是Asgn2类

  import java.util.Scanner; 

public class Asgn2 {

public static void main(String [] args){
扫描仪扫描=新扫描仪(System.in);
System.out.print(你叫什么名字player 1:);
String p1name = scan.nextLine();
System.out.print(你叫什么名字player 2:);
String p2name = scan.nextLine();
Player p1 = new Player(p1name);
Player p2 = new Player(p2name);

System.out.print(游戏有多少轮次:);
int numTurns = scan.nextInt();
System.out.print(每个玩家每回合有多少动作:);
int numMoves = scan.nextInt();

(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 + (s):);
for(int move = 1; move< = numMoves; move ++){
String currMove = scan.next(); // split in 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()+和Player 2在+ p2.getPos );
System.out.println();
}
}
}
}

这里是Player类

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

在任何人前,并说,发布代码块没有帮助OP,我在一个聊天室,他在我解释这个东西,所以不要讨厌:)


.split() Method is NOT Allowed

I was got some help earlier from a helpful guy! I was just wondering if anyone could help me modify this a little bit more,

The code is meant for an assignment and It is based on the input from the scanner. It has two other classes but this is the one of interest.

The code is working at the moment, however The things that have to be input are things like **U5, D10** etc. That works fine. However I need the code to be able to read multiple String off one one line whilst seperating them like they are now. Like say for example **D10 U5 L4**, all from one line for just one player out of two. The code at the moment is not recognizing it as one line and instead if assigning the second typed thing to the second player.

Any tips?

Thanks

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






 }
}
 }

解决方案

Here is the Asgn2 class

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

And here is the Player class

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

And before anyone goes and says that posting blocks of code does not help OP, I am in a chatroom with him in which I explain this stuff, so dont hate :)

这篇关于如何通过扫描仪从同一行读取多个字符串无Split();的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆