问题详述:
在程序中采用 do while 循环体进行循环输入 Scanner input = nnew Scanner(System.in); 程序会提示“input is never closed” ,但是不会报错,程序也能正确运行,当我在循环体里面的最后一句加上“input.closed();”时,程序不会报错,可以运行,但会出现问题。如果我把“input.closed();”放在else语句里,就不会提示,也能正确运行了。详情见代码:
问题相关代码:
package Task_01;
import java.util.Scanner;
/**
2、找出数组的最值 定义一个长度为 10 的整型数组 nums ,循环输入 10 个整数。输出数组的最大值、最小值。
@author micha
/
public class demo_02 {public static void main(String[] args) {
int count = 0;// 用于循环输入数组元素计数 int[] num = new int[10];// 定义数组,长度为10 System.out.println("请输入数组的十个元素:");// 提示输入 // 循环输入体: do { Scanner input = new Scanner(System.in); if (input.hasNextInt()) { num[count] = input.nextInt(); count++; } else { System.out.println("输入错误!请重新输入:"); input.close(); // 若输入非整型数据则重新输入,计数值不变 } } while (count < 10); System.out.println("数组为:"); for (int i = 0; i < 10; i++) { System.out.print(num[i] + ","); } // 先循环输出数组元素 System.out.println("\n-------------------------"); int dataMax = num[0]; int dataMin = num[0]; for (int i = 1; i < 10; i++) { if (dataMax < num[i]) { dataMax = num[i]; } if (dataMin > num[i]) { dataMin = num[i]; } } System.out.println("数组中最小元素为:" + dataMin); System.out.println("数组中最大元素为:" + dataMax);
}
}
运行结果及报错内容
请输入数组的十个元素:
1
2
3
4
5
6
7
8
9
0
数组为:
1,2,3,4,5,6,7,8,9,0,
数组中最小元素为:0
数组中最大元素为:9
运行结果正确,无报错。
错误代码:
do {
Scanner input = new Scanner(System.in);
if (input.hasNextInt()) {
num[count] = input.nextInt();
count++;
} else {
System.out.println("输入错误!请重新输入:");
// 若输入非整型数据则重新输入,计数值不变
}
input.close();
} while (count < 10);
错误结果:
在输入第一个整数之后会无限输出第七行代码
我想要达到的结果
我的问题是:
1.为什么input.close(); 放在循环体最后面会导致程序无法正确运行?放在else里就可以?
2.如果采用do while循环体,应该怎样正确进行循环输入?
3.我的代码是否合理?是否有更高效的循环输入格式?
谢谢!