注册 登录
编程论坛 JAVA论坛

java从键盘输入任意8个整数正数,输入<=0的数,提示“请输入正数”,计算8个数和输出它们的总和,计算8个数平均值,最大值和最小值。

a1024204390 发布于 2018-03-15 12:58, 6061 次点击
从键盘输入任意8个整数正数,
1,输入<=0的数,提示“请输入正数”。
2,计算8个数和输出它们的总和。
3,计算8个数平均值,最大值和最小值。

就是那个判断是否为负,那一块写不好了,很纠结,求解答,谢谢!
程序代码:
import java.util.Scanner;
public class xfor {
   
    public xfor() {
        // TODO Auto-generated constructor stub
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scan=new Scanner(System.in);
        int []num=new int [9];
        int i,sum=0,max=0,min=0;
        double av=0;
        int t;
      
         System.out.println("请输入八个正整数:");
      
        for(i=0;i<8;i++)
         {   
            t=scan.nextInt();
            if(t>0)
             {
                num[i]=t;
                max=min=num[0];
                if(num[i]>max) max=num[i];
                   if(num[i]<min) min=num[i];
                   sum+=num[i];
                   av=(double)sum/8;
             }
            else
                {
                System.out.println("请输入正数:");              
                i=0;
                break;
                }
            
      
               
         }
         
            for(i=0;i<8;i++){
                 System.out.print(num[i]+" ");
      
                }
            System.out.println("");
            System.out.println("sum="+sum);
            System.out.println("average="+av);
            System.out.println("max="+max);
            System.out.println("min="+min);
               
                 
                 
         }
            
         }

15 回复
#2
疯狂的小a2018-03-15 15:28
程序代码:
package com.xiaoa.demo;

import java.util.Scanner;

public class AFor {

    public static void main(String[] args) {
        // 获取长度8的数组
        int[] arr = getArr();

        // 取数组最大值
        int max = getMax(arr);
        // 获取最小值
        int min = getMin(arr);
        // 获取平均值
        int avg = getAvg(arr);
        // 获取和
        int sum = genSum(arr);

        System.out.println("sum=" + sum);
        System.out.println("average=" + avg);
        System.out.println("max=" + max);
        System.out.println("min=" + min);

    }

    public static int genSum(int[] arr) {
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum += arr[i];
        }
        return sum;
    }

    public static int getAvg(int[] arr) {
        int sum = genSum(arr);
        int length = arr.length;
        return sum / length;
    }

    public static int getMin(int[] arr) {
        int min = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (min > arr[i]) {
                min = arr[i];
            }
        }
        return min;
    }

    public static int getMax(int[] arr) {
        int max = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (max < arr[i]) {
                max = arr[i];
            }
        }
        return max;
    }

    public static int[] getArr() {
        int[] arr = new int[8];// 定义长度为8的数组存放数据
        
// 用循环给数组元素赋值
        for (int i = 0; i < arr.length; i++) {
            for (;;) {
                System.out.println("请输入第" + (i+1) + "个数字(大于等于0):");
                Scanner sc = new Scanner(System.in);
                int num = sc.nextInt();
                // 判断数字是否满足条件
                if (num > 0) {
                    arr[i] = num;
                } else {
                    // 不满足条件
                    System.out.println("次数不满足条件,重新输入");
                    i--;
                    break;
                }
                break;
            }
        }
        return arr;
    }

}
#3
疯狂的小a2018-03-15 15:34
程序代码:
package com.xiaoa.demo;

import java.util.Scanner;

public class AFor {

    public static void main(String[] args) {
        // 获取长度8的数组
        int[] arr = getArr();

        // 取数组最大值
        int max = getMax(arr);
        // 获取最小值
        int min = getMin(arr);
        // 获取平均值
        int avg = getAvg(arr);
        // 获取和
        int sum = genSum(arr);

        System.out.println("sum=" + sum);
        System.out.println("average=" + avg);
        System.out.println("max=" + max);
        System.out.println("min=" + min);

    }

    public static int genSum(int[] arr) {
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum += arr[i];
        }
        return sum;
    }

    public static int getAvg(int[] arr) {
        int sum = genSum(arr);
        int length = arr.length;
        return sum / length;
    }

    public static int getMin(int[] arr) {
        int min = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (min > arr[i]) {
                min = arr[i];
            }
        }
        return min;
    }

    public static int getMax(int[] arr) {
        int max = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (max < arr[i]) {
                max = arr[i];
            }
        }
        return max;
    }

    public static int[] getArr() {
        Scanner sc = new Scanner(System.in);
        try {
            int[] arr = new int[8];// 定义长度为8的数组存放数据
            
// 用循环给数组元素赋值
            for (int i = 0; i < arr.length; i++) {
                for (;;) {
                    System.out.println("请输入第" + (i + 1) + "个数字(大于等于0):");
                    int num = sc.nextInt();
                    // 判断数字是否满足条件
                    if (num > 0) {
                        arr[i] = num;
                    } else {
                        // 不满足条件
                        System.out.println("此数不满足条件,重新输入");
                        i--;
                        break;
                    }
                    break;
                }
            }
            return arr;
        } finally {
            //关闭资源
            sc.close();
        }
    }

}
忘记关闭资源,补上!
#4
a10242043902018-03-15 17:12
回复 3楼 疯狂的小a
非常谢谢你的解答!
这是我做了更改后的代码
程序代码:
import java.util.Scanner;
public class xfor {
   
    public xfor() {
        // TODO Auto-generated constructor stub
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scan=new Scanner(System.in);
        int []num=new int [8];
        int i,sum=0,max=0,min=0;
        double av=0;
        int t;
        System.out.println("请输入八个正整数:");
      
        for(i=0;i<num.length;i++)
         {   
            t=scan.nextInt();
            num[i]=t;
         }
            for(i=0;i<num.length;i++){
            if(num[i]<0)
             {
                System.out.println("第"+(i+1)+"个数是负数请更正");
                num[i]=scan.nextInt();  
             }
            }
            for(i=0;i<num.length;i++)
            {
                 System.out.print(num[i]+" ");
                 max=min=num[0];
                 if(num[i]>max) max=num[i];
                 if(num[i]<min) min=num[i];
                 sum+=num[i];
                 av=(double)sum/num.length;
            }scan.close();
            System.out.println("");
            System.out.println("sum="+sum);
            System.out.println("average="+av);
            System.out.println("max="+max);
            System.out.println("min="+min);            

 }
            
}
            



#5
疯狂的小a2018-03-15 17:36
回复 4楼 a1024204390
类名不规范。
#6
疯狂的小a2018-03-15 18:23
回复 4楼 a1024204390
要是更正的时候再输入负数,岂不是GG了
#7
疯狂的小a2018-03-15 18:32
程序代码:
package com.xiaoa.demo;

import java.util.Arrays;
import java.util.Scanner;

public class AFor {

    public static void main(String[] args) {
        // 获取长度8的数组
        int[] arr = getArr();

        // 取数组最大值
        int max = getMax(arr);
        // 获取最小值
        int min = getMin(arr);
        // 获取平均值
        int avg = getAvg(arr);
        // 获取和
        int sum = genSum(arr);

        System.out.println("sum=" + sum);
        System.out.println("average=" + avg);
        System.out.println("max=" + max);
        System.out.println("min=" + min);

    }

    public static int genSum(int[] arr) {
        Arrays.sort(arr);
        return ((arr[0]+arr[arr.length-1])*arr.length)/2;
    }

    public static int getAvg(int[] arr) {
        Arrays.sort(arr);
        return ((arr[0]+arr[arr.length-1])*arr.length)/2/arr.length;
    }

    public static int getMin(int[] arr) {
        Arrays.sort(arr);
        return arr[0];
    }

    public static int getMax(int[] arr) {
        Arrays.sort(arr);
        return arr[arr.length-1];
    }

    public static int[] getArr() {
        Scanner sc = new Scanner(System.in);
        try {
            int[] arr = new int[8];// 定义长度为8的数组存放数据
            
// 用循环给数组元素赋值
            for (int i = 0; i < arr.length; i++) {
                for (;;) {
                    System.out.print("请输入第" + (i + 1) + "个数字(大于等于0):");
                    int num = sc.nextInt();
                    // 判断数字是否满足条件
                    if (num > 0) {
                        arr[i] = num;
                    } else {
                        // 不满足条件
                        System.out.println("此数不满足条件,重新输入");
                        i--;
                        break;
                    }
                    break;
                }
            }
            return arr;
        } finally {
            //关闭资源
            sc.close();
        }
    }

}
#8
林月儿2018-03-15 23:01
1.我输入字符报InputMismatchException。
2.存到数组再遍历查找最值和排序之后取最值,还不如在输入过程中不断刷新最值。

个人看法
#9
疯狂的小a2018-03-15 23:32
回复 8楼 林月儿
程序代码:
package com.xiaoa.demo;

import java.util.Arrays;
import java.util.Scanner;

public class AFor {

    public static void main(String[] args) {
        // 获取长度8的数组
        int[] arr = getArr();
        if(null==arr) {
            System.exit(0);
        }

        // 取数组最大值
        int max = getMax(arr);
        // 获取最小值
        int min = getMin(arr);
        // 获取平均值
        int avg = getAvg(arr);
        // 获取和
        int sum = genSum(arr);

        System.out.println("sum=" + sum);
        System.out.println("average=" + avg);
        System.out.println("max=" + max);
        System.out.println("min=" + min);

    }

    public static int genSum(int[] arr) {
        return ((arr[0]+arr[arr.length-1])*arr.length)/2;
    }

    public static int getAvg(int[] arr) {
        return ((arr[0]+arr[arr.length-1])*arr.length)/2/arr.length;
    }

    public static int getMin(int[] arr) {
        return arr[0];
    }

    public static int getMax(int[] arr) {
        return arr[arr.length-1];
    }

    public static int[] getArr() {
        Scanner sc = new Scanner(System.in);
        try {
            int[] arr = new int[8];// 定义长度为8的数组存放数据
            
// 用循环给数组元素赋值
            for (int i = 0; i < arr.length; i++) {
                for (;;) {
                    System.out.print("请输入第" + (i + 1) + "个数字(大于等于0):");
                    int num = sc.nextInt();
                    // 判断数字是否满足条件
                    if (num > 0) {
                        arr[0] = num;
                        Arrays.sort(arr);
                    } else {
                        // 不满足条件
                        System.out.println("此数不满足条件,重新输入");
                        i--;
                        break;
                    }
                    break;
                }
            }
            return arr;
        } catch (Exception e){
            System.out.println("你的智商太低,系统拒绝你继续输入!");
            return null;
        }finally {
            //关闭资源
            sc.close();
        }
    }

}
你看这样可以不可以

[此贴子已经被作者于2018-3-15 23:39编辑过]

#10
林月儿2018-03-16 00:08
挺好的,我也来一段吧
程序代码:
package com.huawei.test0316;

import java.text.DecimalFormat;
import java.util.Scanner;

public class Test1 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int max = 0;
        int min = 0;
        int sum = 0;
        int cur;
        String inputEle = null;
        for(int i = 0; i < 8; i++) {
            System.out.printf("请输入第%d个元素:", i + 1);
            inputEle = scan.next();
            try {
                cur = Integer.parseInt(inputEle);
                if(cur <= 0) {
                    System.out.println("请输入正数");
                    i--;
                    continue;
                }
                if(i == 0) {
                    max = min = cur;
                }else{
                    if(max < cur){
                        max = cur;
                    }
                    if(min > cur){
                        min = cur;
                    }
                }
                sum += cur;
            } catch (NumberFormatException e) {
                System.out.println("error:"+e.getMessage());
                i--;
            }
        }
        scan.close();
        DecimalFormat dm = new DecimalFormat("#.00");
        System.out.printf("sum:%d\navg:%s\nmax:%d\nmin:%d\n",
                sum, dm.format(sum*1.0/8), max, min);
    }
}
#11
疯狂的小a2018-03-16 08:40
我输入2147483648,显示error:For input string: "2147483648"
#12
静水且流深2018-03-16 22:11
我也是,你们都不自测的吗?
#13
疯狂的小a2018-03-16 22:34
回复 12楼 静水且流深
我觉得主要是需求不明确,因为整数的范围无限大,而没有任何东西能容下,所以没有完美的答案
#14
静水且流深2018-03-17 21:48
回复 13楼 疯狂的小a
呵呵,
#15
林月儿2018-03-17 21:53
回复 14楼 静水且流深
大神说的对,还是太年轻了。现在去华为了吗?
#16
桃花岛主丶2018-03-20 00:12
忍不住试试
public class WanWan {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int []arr=new int[8];
        int sum=0;
        int max,min;
        double av;
            for (int j = 0; j < arr.length; j++) {
                System.out.println("请输入整数:");
                int t=sc.nextInt();
                if (t>0) {
                    arr[j]=t;
                    max=arr[0];
                    min=arr[0];
                    sum+=t;
                    if (max<arr[j]) {
                        max=arr[j];
                    }
                    if (min>arr[j]) {
                        min=arr[j];
                    }
                }else{
                    System.out.println("请输入正整数:");
                    j--;
                    continue;
                }
                if (j==7) {
                    System.out.println("最大:"+max);
                    System.out.println("最小:"+min);
                    av=sum*1.0/arr.length;
                    System.out.println("平均:"+av);
                }
            }
            System.out.println("和:"+sum);
    }
}

1