0

我必须用 Scanner 阅读以下符号并分别处理它们。

输入是:

@@@xx@*
1 -1 -1 4

第一行是游戏动物的生命和食物,第二行是她-向左、+向右的动作

我从一些东西开始,但还不够:

Scanner sc = new Scanner(System.in).useDelimiter("\\s*");
while (!sc.hasNext("z")) {
    char ch = sc.next().charAt(0);
    System.out.print("[" + ch + "] "); // to check what is happening
}

如何读取第二行整数,-然后+对其进行操作?

4

6 回答 6

1

你可以使用 Scanner 的内置方法nextInt()next()也可以寻找一些hasNextInt()有用的东西。

于 2018-07-12T09:11:45.623 回答
1

您可以使用各种扫描仪类函数来做到这一点。输入为:1 -1 -1 4

创建两个数组来存储字符“-”和“+”以及一个存储整数

Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
   if(sc.hasNextInt()){
         intArray = sc.nextInt();
   }
   else charArray = sc.next();
}
于 2018-07-12T09:28:59.430 回答
0

您可以阅读整行而不是按字符阅读。然后将行拆分为字符串数组,该数组将包含行的字符并使用数组进行操作。这是您的案例的解决方案line.replaceAll("(-*[\\W\\d\\w])(\\s*)", "$1 ")

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (!sc.hasNext("z")) {
  String line = sc.nextLine();
  String[] split = line.replaceAll("(-*[\\W\\d\\w])(\\s*)", "$1 ").trim().split(" ");
  Arrays.asList(split).forEach(ch -> System.out.print(ch + " "));
}
}

输出:

@@@xx@*
@ @ @ x x @ * 

1 -1 -1 4 
1 -1 -1 4 
于 2018-07-12T09:42:46.223 回答
0

如果它解析,您可以将输入字符解析为整数,然后如果它抛出数字格式异常,您可以继续您的代码,那么您应该知道输入字符不是数字。

   Scanner sc = new Scanner(System.in).useDelimiter("\\s*");

    while (!sc.hasNext("z")) {
        char ch = sc.next().charAt(0);
        try {
            int a = Integer.parseInt(String.valueOf(ch));
            switch (a){
                case 1:
                    // your condition
                case -1:
                    // your condition
                case -4:
                    //condition
                default:
                    // your condition
            }
        }catch (NumberFormatException ex){
            System.out.printf("input character is not number");
        }
        System.out.print("[" + ch + "] ");// to chack what is happening
    }
于 2018-07-12T09:17:08.247 回答
0

Java Scanner 类有一大堆方法用于抓取和解析字符串的下一部分,例如next(), nextInt(),nextDouble()等。

代码如下所示:

String input = "1 -1 -1 4";
Scanner s = new Scanner(input);
int i1 = s.nextInt();
int i2 = s.nextInt();
int i3 = s.nextInt();
int i4 = s.nextInt();

将读取所有四个值

于 2018-07-12T09:09:50.240 回答
0

正如大多数人所说,您可以使用scanner.nextInt() 并查看是否必须向左或向右走,您有方法Math.signum() 告诉您要走,然后您可以使用Math.abs() 将值作为绝对数获取。

于 2018-07-12T11:41:03.403 回答