我必须使用扫描仪读取以下符号并分别进行处理。 第一行是游戏动物的生命和食物,第二行是她将“-”向左移动,“ +”向右移动 输入为:
@@@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 chack what is happening
}
如何读取带有“-”和“ +”的第二行整数,然后对其进行运算?
答案 0 :(得分:1)
您可以使用诸如nextInt()
和next()
之类的Scanner内置方法,也可以寻找诸如hasNextInt()
之类的东西。
答案 1 :(得分:1)
您可以使用各种扫描仪类功能来执行此操作。输入为: 1 -1 -1 4
创建两个数组来存储字符“-”和“ +”,并创建一个数组来存储整数
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
if(sc.hasNextInt()){
intArray = sc.nextInt();
}
else charArray = sc.next();
}
希望这可以解决您的问题
答案 2 :(得分: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();
将读取所有四个值
答案 3 :(得分: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
}
答案 4 :(得分:0)
您可以阅读整行而不是按字符阅读。然后将行拆分为String数组,它将包含行字符并与array一起操作。这是您的案件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
答案 5 :(得分:0)
正如大多数人所说的,您可以使用scanner.nextInt()并查看是否必须向左或向右移动,您需要使用Math.signum()方法来告诉您要去然后您可以将Math.abs()用作绝对值。