java综合练习 键盘输入1-100之间的整数,并添加到集合中。直到集合中所有数据和超过200为之。


下面是一个Java程序,可以让用户不断输入1-100之间的整数,并将它们添加到集合中,直到集合中所有数据和超过200为止:

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        List<Integer> list = new ArrayList<>();
        int sum = 0;
        while (sum <= 200) {
            System.out.print("请输入一个1-100之间的整数:");
            int num = scanner.nextInt();
            if (num < 1 || num > 100) {
                System.out.println("输入的数字不在1-100范围内,请重新输入!");
                continue;
            }
            list.add(num);
            sum += num;
        }
        System.out.println("集合中的元素为:" + list);
        System.out.println("集合中所有数据和为:" + sum);
    }
}

程序首先创建了一个Scanner对象和一个ArrayList对象,用于存储用户输入的数字。然后定义了一个sum变量,用于记录集合中所有数字的和。

程序使用while循环,当集合中所有数字的和超过200时,循环结束。在循环中,程序先提示用户输入一个1-100之间的整数,然后使用Scanner对象读取用户输入的数字。如果输入的数字不在1-100范围内,则程序会提示用户重新输入。如果输入的数字在1-100范围内,则程序将该数字添加到集合中,并将该数字加到sum变量中。

循环结束后,程序输出集合中的所有元素以及集合中所有数字的和。

如果你想对程序进行一些优化,可以考虑以下几点:

  1. 使用do-while循环来避免重复的代码。do-while循环可以保证至少执行一次,这样可以避免在循环开始时重复提示用户输入数字的代码。修改后的程序如下:
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        List<Integer> list = new ArrayList<>();
        int sum = 0;
        int num;
        do {
            System.out.print("请输入一个1-100之间的整数:");
            num = scanner.nextInt();
            if (num < 1 || num > 100) {
                System.out.println("输入的数字不在1-100范围内,请重新输入!");
            } else {
                list.add(num);
                sum += num;
            }
        } while (sum <= 200);
        System.out.println("集合中的元素为:" + list);
        System.out.println("集合中所有数据和为:" + sum);
    }
}
  1. 使用for-each循环来遍历集合中的元素。for-each循环可以简化代码,使程序更加简洁易读。修改后的程序如下:
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        List<Integer> list = new ArrayList<>();
        int sum = 0;
        int num;
        do {
            System.out.print("请输入一个1-100之间的整数:");
            num = scanner.nextInt();
            if (num < 1 || num > 100) {
                System.out.println("输入的数字不在1-100范围内,请重新输入!");
            } else {
                list.add(num);
                sum += num;
            }
        } while (sum <= 200);
        System.out.print("集合中的元素为:");
        for (int i : list) {
            System.out.print(i + " ");
        }
        System.out.println();
        System.out.println("集合中所有数据和为:" + sum);
    }
}
  1. 使用try-with-resources语句来自动关闭Scanner对象。这样可以避免在程序结束时手动关闭Scanner对象的代码。修改后的程序如下:
import java.util.*;

public class Main {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        int sum = 0;
        int num;
        try (Scanner scanner = new Scanner(System.in)) {
            do {
                System.out.print("请输入一个1-100之间的整数:");
                num = scanner.nextInt();
                if (num < 1 || num > 100) {
                    System.out.println("输入的数字不在1-100范围内,请重新输入!");
                } else {
                    list.add(num);
                    sum += num;
                }
            } while (sum <= 200);
        }
        System.out.print("集合中的元素为:");
        for (int i : list) {
            System.out.print(i + " ");
        }
        System.out.println();
        System.out.println("集合中所有数据和为:" + sum);
    }
}

通过以上几点优化,程序变得更加简洁、易读和安全

  1. 在每次添加新元素到集合中之前,可以先判断集合中是否已经包含该元素,如果已经包含,则不添加该元素到集合中。这样可以避免集合中出现重复的元素。修改后的程序如下:
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        List<Integer> list = new ArrayList<>();
        int sum = 0;
        int num;
        do {
            System.out.print("请输入一个1-100之间的整数:");
            num = scanner.nextInt();
            if (num < 1 || num > 100) {
                System.out.println("输入的数字不在1-100范围内,请重新输入!");
            } else if (list.contains(num)) {
                System.out.println("集合中已经包含该元素,请重新输入!");
            } else {
                list.add(num);
                sum += num;
            }
        } while (sum <= 200);
        System.out.print("集合中的元素为:");
        for (int i : list) {
            System.out.print(i + " ");
        }
        System.out.println();
        System.out.println("集合中所有数据和为:" + sum);
    }
}
  1. 对于大型数据集合,可以使用HashSet代替ArrayList来存储集合中的元素,这样可以提高查找元素的速度。HashSet底层采用哈希表实现,能够快速判断一个元素是否已经存在于集合中。修改后的程序如下:
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Set<Integer> set = new HashSet<>();
        int sum = 0;
        int num;
        do {
            System.out.print("请输入一个1-100之间的整数:");
            num = scanner.nextInt();
            if (num < 1 || num > 100) {
                System.out.println("输入的数字不在1-100范围内,请重新输入!");
            } else if (set.contains(num)) {
                System.out.println("集合中已经包含该元素,请重新输入!");
            } else {
                set.add(num);
                sum += num;
            }
        } while (sum <= 200);
        System.out.print("集合中的元素为:");
        for (int i : set) {
            System.out.print(i + " ");
        }
        System.out.println();
        System.out.println("集合中所有数据和为:" + sum);
    }
}

以上是一些可以优化程序的方法,可以根据实际需求选择适合的方法来优化程序。

  1. 可以将输入数字的范围和最大的数据和值设置为变量,以便在后续修改时更方便。修改后的程序如下:
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        Set<Integer> set = new HashSet<>();
        int sum = 0;
        int num;
        int minNum = 1;
        int maxNum = 100;
        int maxSum = 200;
        do {
            System.out.printf("请输入一个%d-%d之间的整数:", minNum, maxNum);
            num = scanner.nextInt();
            if (num < minNum || num > maxNum) {
                System.out.printf("输入的数字不在%d-%d范围内,请重新输入!%n", minNum, maxNum);
            } else if (set.contains(num)) {
                System.out.println("集合中已经包含该元素,请重新输入!");
            } else {
                set.add(num);
                sum += num;
            }
        } while (sum <= maxSum);
        System.out.print("集合中的元素为:");
        for (int i : set) {
            System.out.print(i + " ");
        }
        System.out.println();
        System.out.println("集合中所有数据和为:" + sum);
    }
}
  1. 对于输入数字的范围和最大数据和值,也可以通过命令行参数传递进来。这样可以在程序运行时动态修改参数,而不需要修改程序源代码。修改后的程序如下:
import java.util.*;

public class Main {
    public static void main(String[] args) {
        int minNum = 1;
        int maxNum = 100;
        int maxSum = 200;
        if (args.length >= 3) {
            minNum = Integer.parseInt(args[0]);
            maxNum = Integer.parseInt(args[1]);
            maxSum = Integer.parseInt(args[2]);
        }
        Scanner scanner = new Scanner(System.in);
        Set<Integer> set = new HashSet<>();
        int sum = 0;
        int num;
        do {
            System.out.printf("请输入一个%d-%d之间的整数:", minNum, maxNum);
            num = scanner.nextInt();
            if (num < minNum || num > maxNum) {
                System.out.printf("输入的数字不在%d-%d范围内,请重新输入!%n", minNum, maxNum);
            } else if (set.contains(num)) {
                System.out.println("集合中已经包含该元素,请重新输入!");
            } else {
                set.add(num);
                sum += num;
            }
        } while (sum <= maxSum);
        System.out.print("集合中的元素为:");
        for (int i : set) {
            System.out.print(i + " ");
        }
        System.out.println();
        System.out.println("集合中所有数据和为:" + sum);
    }
}

可以在命令行中输入如下命令运行程序:

java Main 1 100 200

这样就可以将输入数字的范围设置为1-100,最大数据和值设置为200。如果不指定命令行参数,则会使用程序中的默认值。


原文链接:codingdict.net