Java 尝试在我的类中修复此方法,我认为可能尝试catch,但目标是让用户只能输入1-9

Java 尝试在我的类中修复此方法,我认为可能尝试catch,但目标是让用户只能输入1-9,java,Java,我不断得到一个无限循环,所以我改变了代码,现在我得到一个错误。 我只希望用户能够输入1-9(tic-tac-toe游戏)任何我非常感谢的建议。这是我们班的方法 public int move() { // make it so they can only choose 1-9 System.out.print("Where do you want to move? "); Scanner in = new Scanner(System.in); int move =

我不断得到一个无限循环,所以我改变了代码,现在我得到一个错误。 我只希望用户能够输入
1
-
9
(tic-tac-toe游戏)任何我非常感谢的建议。这是我们班的方法

public int move() {  // make it so they can only choose 1-9

    System.out.print("Where do you want to move? ");
    Scanner in = new Scanner(System.in);
    int move = in.nextInt();
    while(move >=1 || move < 10 )
    {
         System.out.println("that move is invalid must be 1-9");
         break;
    }
     return move;
}
public int move(){//让他们只能选择1-9
System.out.print(“您想移动到哪里?”);
扫描仪输入=新扫描仪(系统输入);
int move=in.nextInt();
同时(移动>=1 | |移动<10)
{
System.out.println(“移动无效必须为1-9”);
打破
}
回击动作;
}
错误是:

线程“main”java.lang.ArrayIndexOutOfBoundsException中的异常:3
在tictactoe.Board.isValid(Board.java:44)
在tictactoe.tictactoe.main(tictactoe.java:116)
C:\Users\blah\AppData\Local\NetBeans\Cache\8.1\executor- snippets\run.xml:53:Java返回:1
生成失败(总时间:7秒)


在while循环中,您希望使用Scanner类再次提示用户输入move int

while(move <= 0 || move >= 10 )
{
   System.out.println("that move is invalid must be 1-9");
   System.out.print("Where do you want to move? ");
   move = in.nextInt();
}
while(移动=10)
{
System.out.println(“移动无效必须为1-9”);
System.out.print(“您想移动到哪里?”);
move=in.nextInt();
}

您的while循环将循环,直到输入的数字无效,请反转循环中的条件。您还需要从用户那里重新获得所需的移动

while(move < 1 || move >= 10 ) {
         System.out.println("that move is invalid must be 1-9");
         move = in.nextInt();
}
while(移动<1 | |移动>=10){
System.out.println(“移动无效必须为1-9”);
move=in.nextInt();
}

您的逻辑中有一些错误。让我们试试这个:

public int move() {  // make it so they can only choose 1-9
    System.out.print("Where do you want to move? ");
    Scanner in = new Scanner(System.in);
    int move = in.nextInt();
    while (move < 1 || move > 9) {
         System.out.println("that move is invalid must be 1-9");
         move = in.nextInt();
    }
    return move;
}
public int move(){//让他们只能选择1-9
System.out.print(“您想移动到哪里?”);
扫描仪输入=新扫描仪(系统输入);
int move=in.nextInt();
同时(移动<1 | |移动>9){
System.out.println(“移动无效必须为1-9”);
move=in.nextInt();
}
回击动作;
}

请注意,while循环毫无价值,因为它永远不会循环。如果用户输入不正确,您可能希望从循环中获取用户输入?此外,您不希望创建一组新的扫描仪对象。而是在你的程序中创建一次,并在需要的地方传递它它将无限循环。您的错误不是来自您发布的代码,很可能是错误输入的副作用。您是否阅读了错误消息和堆栈跟踪?这与此代码无关。@SLaks它可能与此代码无关。我假设它返回的move值高于允许值,导致数组越界异常,因为您在数组中使用了它返回的变量。现在我想起来了,您如何确保用户只输入了一个整数,。我不能有任何字母或特殊字符@shmosel@Progamminnoob看见