Java打印0-100奇偶数字结果末尾出现101的问题如何解决?
问题原因
你代码里多余的101来自两处多余的打印语句,具体逻辑如下:
- 你定义的
oddNumbers、evenNumbers方法内部已经通过System.out.print直接打印了所有符合要求的数字,循环结束时触发退出条件start <= 100不成立,此时start的值已经自增到了101,方法最终返回的就是101。 - 你在
main方法调用两个方法后,又额外执行了System.out.println(evenNums)、System.out.println(oddNums),把方法返回的101打印了出来,就是你看到的末尾多余数字。
解决方法
方案一:直接删掉多余打印语句(改法最简单)
因为两个方法本身已经完成了打印逻辑,不需要再打印返回值,直接删掉main里的两行打印返回值的代码即可,同时可以把方法返回值改为void省略无用的return逻辑,顺便优化原方法里写死的循环条件,复用传入的end参数:
public class act1 { public static void main(String[] args) { int start = 0; int end = 100; System.out.println("List of EVEN numbers"); evenNumbers(start, end); System.out.println("\nList of ODD numbers"); oddNumbers(start, end); } static void oddNumbers(int start, int end) { for (int i = start; i <= end; i++) { if (i % 2 != 0) { System.out.print(i + " "); } } } static void evenNumbers(int start, int end) { for (int i = start; i <= end; i++) { if (i % 2 == 0) { System.out.print(i + " "); } } } }
方案二:调整逻辑为方法返回结果集合,由main统一打印
如果你希望方法只负责计算结果、不直接打印,就把结果存到集合中返回,再在main方法里打印:
import java.util.ArrayList; import java.util.List; public class act1 { public static void main(String[] args) { int start = 0; int end = 100; System.out.println("List of EVEN numbers"); List<Integer> evenNums = evenNumbers(start, end); evenNums.forEach(num -> System.out.print(num + " ")); System.out.println("\nList of ODD numbers"); List<Integer> oddNums = oddNumbers(start, end); oddNums.forEach(num -> System.out.print(num + " ")); } static List<Integer> oddNumbers(int start, int end) { List<Integer> res = new ArrayList<>(); for (int i = start; i <= end; i++) { if (i % 2 != 0) { res.add(i); } } return res; } static List<Integer> evenNumbers(int start, int end) { List<Integer> res = new ArrayList<>(); for (int i = start; i <= end; i++) { if (i % 2 == 0) { res.add(i); } } return res; } }
内容的提问来源于stack exchange,提问作者meliodas
相关产品推荐
相关产品推荐

