2015-11-08 104 views
0

.split() Method is NOT Allowed如何通过扫描仪从同一行读取多个字符串无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); 






} 
} 
} 
+0

开始阅读扫描仪类的next()和nextLine()方法的API文档。 – NormR

+0

@NormR Nvm明白了,我忘记了scan.nextLine();在我原来的电话之后,现在它只读取第一个值。就像我输入L45和U45一样,它忽略了U45。有小费吗? –

回答

-1

调用方法.nextLine()而不是.next()。我认为这应该解决你的问题。

+0

调用nextLine不会修复它,但是,在一行中有多个字符串,我似乎无法访问第二个字符串。当我打电话.nextLine()。它打破了代码。 –

0

将输入分配给字符串后,使用.split()方法将字符串拆分为数组。要使用.split(),请放入要分割的字符。在这种情况下,一个空间。例如,将其用于当前项目:.split(" ")。一旦你分裂它,你可以像任何数组一样访问它。

更新:
首次使用.nextLine()并将其分配给一个临时字符串变量。然后 您可以创建另一个扫描仪,把一个字符串,例如:

Scanner sc = new Scanner(YOUR TEMPORARY VARIABLE); 

您现在可以使用.next()来获得个人的字符串。

+0

Woops。我在问题中忘了它,现在将编辑,Split方法不允许使用。 –

+0

试试看,并告诉我,如果这有效。 –

+0

对于我已经拥有的两台扫描仪中的每一台,都这样做了吗? –

0

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

这里是球员类

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之前,我在一个聊天室与他在我解释这个东西,所以不讨厌:)