第一个问题,系统资源释放后就不能再开启了,所以要判断要不要释放资源
package com.kuang.base;
import java.util.Scanner;
public class ForStr {
public static void main(String[] args) {
int i = 0;
int sum1 = 0;
int sum2 = 0;
//循环判断当输入数不为自然数时,自动循环从头
do {
i = 0;
//输入用户数据
Scanner scanner = new Scanner(System.in);//System.in和close()都写在循环里面
System.out.println("请输入你需要求和的数:");
int number = scanner.nextInt();
//判断是否是自然数
if (number > 0) {
//偶数
for (int a = 0; a <= number; a += 2) {
sum1 += a;
}
System.out.println("偶数和为:" + sum1);
//奇数
for (int b = 1; b <= number; b += 2) {
sum2 += b;
}
System.out.println("奇数和为:" + sum2);
} else {
System.out.println("你输出的数值不是自然数,请重新输入!");
i = 1;
}
if(i == 0){ //这里需要判断要不要释放IO资源
scanner.close();
}
}while(i == 1);
}
}
第二个问题,如果把close()写在循环外面,应该把System.in也写在外面
package com.kuang.base;
import java.util.Scanner;
public class ForStr {
public static void main(String[] args) {
int i = 0;
int sum1 = 0;
int sum2 = 0;
Scanner scanner = new Scanner(System.in);//System.in和close()都写在循环外面
//循环判断当输入数不为自然数时,自动循环从头
do {
i = 0;
//输入用户数据
System.out.println("请输入你需要求和的数:");
int number = scanner.nextInt();
//判断是否是自然数
if (number > 0) {
//偶数
for (int a = 0; a <= number; a += 2) {
sum1 += a;
}
System.out.println("偶数和为:" + sum1);
//奇数
for (int b = 1; b <= number; b += 2) {
sum2 += b;
}
System.out.println("奇数和为:" + sum2);
} else {
System.out.println("你输出的数值不是自然数,请重新输入!");
i = 1;
}
}while(i == 1);
scanner.close();
}
}
或者把System.in写在外面,close()加判断写在里面
package com.kuang.base;
import java.util.Scanner;
public class ForStr {
public static void main(String[] args) {
int i = 0;
int sum1 = 0;
int sum2 = 0;
Scanner scanner = new Scanner(System.in); //System.in在循环外面,close()在循环里面
//循环判断当输入数不为自然数时,自动循环从头
do {
i = 0;
//输入用户数据
System.out.println("请输入你需要求和的数:");
int number = scanner.nextInt();
//判断是否是自然数
if (number > 0) {
//偶数
for (int a = 0; a <= number; a += 2) {
sum1 += a;
}
System.out.println("偶数和为:" + sum1);
//奇数
for (int b = 1; b <= number; b += 2) {
sum2 += b;
}
System.out.println("奇数和为:" + sum2);
} else {
System.out.println("你输出的数值不是自然数,请重新输入!");
i = 1;
}
if(i == 0){ //判断要不要释放资源
scanner.close();
}
}while(i == 1);
}
}
总之就是循环内开启IO资源的时候不能在循环外面关闭IO资源;循环内关闭IO资源要判断,因为下一轮循环也不会再次开启