用try catch 来捕获异常。
出现异常说明输入的就是非数字。
代码如下:
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int sum=0,count1=0,count2=0,max=0,min=Integer.MAX_VALUE;
System.out.println("请输入整数:");
while(true){
try {
int num=in.nextInt();
sum+=num;
if(num>0){
count1++;
if(num<min){
min=num;
}
}else{
if(num<max){
max=num;
}
count2++;
}
} catch (Exception e) {
System.out.println("累加和:"+sum);
System.out.println((count1>count2?"正数":"负数")+"多");
System.out.println("最大的负数:"+max+",最小的正数:"+min);
break;
}
}
}
}
第一种:使用try...catch
public class Test {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入数字(输入非数字时结束录入):");
//定义变量,存放数字和
double sum = 0;
//定义两个计数器,分别记录正数和负数的数量
int positiveCount = 0; //正数数量
int negativeCount = 0; //负数数量
//定义最大的负数和最小的正数
double maxNumber = 0;
double minNumber = 0;
int n=0;
int k=0;
//循环录入数字
while (true){
//输入数字,捕获异常
/**
* 在要求输入double类型的数字情况下输入字母汉字或其他符号会出现异常
* 在这里将出现异常后,设置跳出循环即可
*/
try {
double number = sc.nextDouble();
//1.计算所有这些数字的累加和
sum+=number;
//2.判断正数多,还是负数多(0既不是正数也不是负数)
//3.找出最大的负数和最小的正数
if (number>0){
//变量赋初值
if (n!=1){
minNumber = number;
n++;
}
positiveCount++;
if (number<minNumber){
//最小的正数
minNumber = number;
}
}else if (number<0){
//变量赋初值
if (k!=1){
maxNumber = number;
k++;
}
negativeCount++;
if (number>maxNumber){
//最大的负数
maxNumber = number;
}
}
}catch (Exception e){
//e.printStackTrace();
break;
}
}
System.out.println("数字累加和为:"+sum);
System.out.println("正数"+positiveCount+"个,负数"+negativeCount+"个。");
if (positiveCount>negativeCount){
System.out.println("正数多");
}else if(positiveCount<negativeCount){
System.out.println("负数多");
}else {
System.out.println("一样多");
}
System.out.println("最大的负数:"+maxNumber+",最小的正数:"+minNumber);
}
}
第二种:使用方法判断输入的是否是数字,在这里我就只给出判断方法了
//把全为数字的字符串转换为int类型,并返回其数值
public static int printInt(String x){
//调用判断字符串是否全为数字的方法的返回值进行判断
if(isNumberic(x)){
//将获取到的数字字符串转为int类型的数字
int y = Integer.parseInt(x);
return y;
}else{
//写一个死循环,直到用户输入全为数字字符串时才停止
while(true){
System.out.print("你输入的值无意义! 请你重新输入: ");
String num = sc.next();
if(isNumberic(num)){
int y1 = Integer.parseInt(num);
return y1;
}
}
}
}
//判断字符串是否全是数字,是返回true,否则返回false
//设置参数为String类型的字符串
public static boolean isNumberic(String str) {
//使用正则表达式进行判断是否全为数字
Pattern pattern = Pattern.compile("[0-9]*");
return pattern.matcher(str).matches();
}
那你最好别用nextInt(),本身你也是double型。
用nextline当字符串输入,然后检查字符是否有非数字
把while里面改成while(jianpan.hasnextInt()),如果你输入的是数字那么就是true,不是就是false