/*1. 求某范围的所有含1 这个数字的数并存盘保存。[基础算法+IO]
( SpecialDigitals.java )
题目要求:
a) 开始和结束范围由用户从控制台(System.in)手工录入。
b) 统计数量并求和。
c) 计算结果保存在 c:\numbers.txt 文件中(每行输出8 个数,可多行显示)。
文件格式如下:
开始范围:1
结束范围:20
数字:1 10 11 12 13 14 15 16
…..
…..
数字数量:xx 个
数字和:xxxx
*/
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.Scanner;
/**
* @author Calm
*
*/
public class SpecialDigitals {
/**
* @param args
*/
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int start; //开始范围
int end; //结束范围
int count = 0; //计数器
int sum = 0; //数字和
PrintWriter writer = null;
try {
writer=new PrintWriter(new FileOutputStream(new File("c:/numbers.txt"),true));
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.print("开始范围: ");
writer.print("开始范围: ");
start = input.nextInt();
writer.println(start);
System.out.print("结束范围: ");
writer.print("结束范围: ");
end = input.nextInt();
writer.println(end);
System.out.println("\n满足的特殊数字如下: ");
writer.println("\n满足的特殊数字如下: ");
for(int i = start; i <= end; i++){
if(isSpecialDigital(i)){
System.out.print(i + "\t");
writer.print(i + "\t");
sum += i;
count++;
if(count % 8 ==0){
System.out.println();
writer.println();
}
}
}
System.out.println("\n数字数量: " + count);
writer.println();
writer.println("数字数量:\n " + count);
System.out.println("数字和: " + sum);
writer.println("数字和: " + sum);
writer.flush();
writer.close();
}
/**
* 判断一个整数是否是要求的特征数字
* @param n
* @return
*/
public static boolean isSpecialDigital(int n){
while(n != 0){
if(n % 10 == 1)
return true;
else
n /= 10;
}
return false;
}
}
做这道题的时候发现,writer.print("\n")语句无法将换行操作写入文件,而writer.print('\n')语句就可以。
不明白是什么原因,在控制台输出时,用System.out.print("\n")和System.out.print('\n')都可以输出换行。
原来在windows系统中,写入时换行是用\r\n,writer.print("\r\n");就能写入换行