Java中scanner能用.nextint取负数么
时间: 2024-09-21 07:10:43 浏览: 25
在Java中,`Scanner` 类的 `.nextInt()` 方法用于读取整数值,并默认期待的是正整数。当你尝试从 `Scanner` 输入一个负数时,`.nextInt()` 可能会抛出 `InputMismatchException`,因为这个方法只解析正整数格式的数据。
如果你想让 `Scanner` 能够接收负数输入,你需要明确告诉它允许浮点数或者负数。你可以使用 `.nextDouble()` 来读取整数和小数,或者先使用 `.hasNextInt()` 检查是否还有下一个整数可用,再判断其符号。例如:
```java
Scanner scanner = new Scanner(System.in);
if (scanner.hasNextInt()) {
int num = scanner.nextInt();
if (num < 0) {
System.out.println("这是一个负数:" + num);
} else {
System.out.println("这是一个正数:" + num);
}
} else {
// 处理非整数输入
}
```
相关问题
import java.util.Scanner; public class inverse { public static void main(String[] args) { // TODO 自动生成的方法存根 int n; Scanner sc = new Scanner(System.in); n=sc.nextInt(); if(n<=-100000||n>=100000) { System.out.println("ERROR"); } else { if(n<0) { System.out.print("-"); n=-n; } while(n!=0) { System.out.print(n%10); } } } }
这是一个Java程序,用于将一个整数的各个位数按相反的顺序输出。程序首先通过Scanner获取用户输入的整数,然后判断该整数是否在-100000到100000之间。如果不在这个范围内,则输出"ERROR"。否则,程序会判断该整数是否为负数,如果是,则先输出一个负号,并将该整数取相反数。然后,程序通过循环将该整数的各个位数按相反的顺序输出。
Scanner sc = new Scanner(System.in); int num = sc.nextInt(); for (int i = 1; i <= num; i++) { int count = 1; int tmp = i; while (tmp > 0) { count++; tmp = tmp / 10; } tmp = i; int sum = 0; while (tmp != 0) { sum += Math.pow(tmp % 10,count); tmp /= 10; } if(sum == i) { System.out.println(i); } }为什么我输入999结果是1
这个问题的原因是,在Java中,当int类型的数值超出了其表示范围时,会发生溢出现象,变成负数。在这段代码中,当i大于等于1000时,count的值会变成负数,从而导致程序输出结果不正确。
解决这个问题的方法是,将count的类型改为long类型,并将count的初始值改为0,然后在while循环中将count的值加1。修改后的代码如下:
```
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
for (int i = 1; i <= num; i++) {
long count = 0;
int tmp = i;
while (tmp > 0) {
count++;
tmp = tmp / 10;
}
tmp = i;
int sum = 0;
while (tmp != 0) {
sum += Math.pow(tmp % 10,count);
tmp /= 10;
}
if(sum == i) {
System.out.println(i);
}
}
```
这样修改后,就可以正确地输出结果了。