下面是用于读取名为Sales.txt的现有文本文件并将条形图输出到名为storeReport.txt的文本文件的Java代码
每个星号代表100美元的销售额 .
import java.io. *;
import java.util . *;
公共课BarChart
{public static void main(String [] args)抛出FileNotFoundException,IOException
{
int[] s = new int[5];
int[] b = new int[5];
FileWriter fstream = new FileWriter("storeReport.txt");
BufferedWriter out = new BufferedWriter(fstream);
Scanner scanner = new Scanner(new File("Sales.txt"));
int i = 0;
while(scanner.hasNext())
s[i++] = scanner.nextInt();
System.out.println("SALES BAR CHART\n");
out.write("SALES BAR CHART\n");
for (i=0; i<s.length; i++)
{
b[i] = s[i]/100;
out.write("store "+ (i+1) +" : ");
System.out.print("store "+ (i+1) +" : ");
for(int j = 1; j <= b[i]; j++) {
System.out.print("*");
out.write("*"); }
out.write("\n");
System.out.println();
}
out.close(); //Close the output stream
}
}
当我在Word,或写字板或NotePad中打开storeReport.txt时,输出显示为预期:
商店1: ******* 商店2: **** *********
商店3: ************
商店4: ******
商店5: *************
当我在NotePad中打开文件时,输出全部显示在一行上 . (我正在使用Windows 7和最新的jGrasp来编译和运行程序 . )SALES BAR CHART
输入文件Sales.txt如下所示:
1000
1200
1800
800
1900
任何人都知道为什么NotePad会将输出显示为:
SALES BAR CHARTstore 1: ******* store 2: **** ******** store 3: **** ************ store 4: **** ****** store 5: **** **************
4 回答
记事本不会将简单的换行符
'\n'
字符解释为换行符 . 它使用"Windows"格式的Carriage Return Newline"\r\n"
来指定换行符 .您基本上需要执行以下操作之一:
停止使用记事本
使用某些程序将行尾字符转换为CR LF(unix2dos)
将程序更改为输出
\r\n
我想大多数人会同意#1是你最好的选择,但我真的不太了解
\r\n
问题在Windows平台上的扩展程度 .编辑:正如srgerg在他的回答中指出的,你最好的选择是停止自己指定
\n
并使用JAVA的out.newLine()函数来生成行结束 . 这些对于您使用的任何平台都是正确的 .有关更多信息,请参阅维基百科:http://en.wikipedia.org/wiki/Newline#Common_problems
我同意上面提供的其他答案 . 只是一个小设计指针,可能会增强整体思维 .
我理解的是你正在创建一些数据,然后尝试从中生成一些图形....
如何使用显式字段分隔符和记录分隔符 .
使用一些编码 . 如果在不同的环境中运行,这将为您提供更好的控制 .
我怀疑这是一个newline问题 . 尝试更换你的
同
记事本只能理解DOS / Windows行结尾,即\ r \ n,而记事本和Wordpad也可以处理Linux / Unix /新MacOS(\ n)和较旧的MacOS(\ r)行结尾 .
您可以尝试为您的系统获得正确的行结束:
或者尝试将
println ()
或printf/format
与"%n"
结合使用,程序将在运行平台上执行适当的操作 .但是,安装比记事本更精细的编辑器并不是一个坏主意 .