1、初写原代码为:
package homework;
import java.util.*;
public class Calculate {
public static void main(String[] args) {
int count;
Scanner sc = new Scanner(System.in);
count = sc.nextInt();
int i = 0;
int value[] = new int[count];
for(i=0; i<count; i++)
{
value[i] = sc.nextInt();
}
int sum = 0;
float average;
for(i=0; i<count; i++)
{
sum += value[i];
}
average = (float)sum/count;
System.out.println(sum);
System.out.println(average);
for(i=0; i<count; i++)
{
if (value[i] > average) {
System.out.println(value[i]);
}
}
}
}
出现Resource leak: ’ ’ is never closed警告
2.查找资料说需要使用 sc.close(); 语句,一般写在main()函数最后即可
package homework;
import java.util.*;
public class Calculate {
public static void main(String[] args) {
int count;
Scanner sc = new Scanner(System.in);
count = sc.nextInt();
int i = 0;
int value[] = new int[count];
for(i=0; i<count; i++)
{
value[i] = sc.nextInt();
}
int sum = 0;
float average;
for(i=0; i<count; i++)
{
sum += value[i];
}
average = (float)sum/count;
System.out.println(sum);
System.out.println(average);
for(i=0; i<count; i++)
{
if (value[i] > average) {
System.out.println(value[i]);
}
}
sc.close();
}
}
但是仍有报错
3.原因与解决:for循环之外的语句只能关闭for循环以外的scanner对象,因而for循环内的scanner对象始终没有被关闭。在for循环内添加
if (i == count-1)
sc.close();
完美解决。
改正后的完整代码:
package homework;
import java.util.*;
public class Calculate {
public static void main(String[] args) {
int count;
Scanner sc = new Scanner(System.in);
count = sc.nextInt();
int i = 0;
int value[] = new int[count];
for(i=0; i<count; i++)
{
value[i] = sc.nextInt();
if (i == count-1)
sc.close();
}
int sum = 0;
float average;
for(i=0; i<count; i++)
{
sum += value[i];
}
average = (float)sum/count;
System.out.println(sum);
System.out.println(average);
for(i=0; i<count; i++)
{
if (value[i] > average) {
System.out.println(value[i]);
}
}
}
}