当输入为非数字的情况下结束while循环

img

用try catch 来捕获异常。
出现异常说明输入的就是非数字。
代码如下:

img

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

img

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