2010年8月18日 星期三

Java 程式教學

1. 將乘法表由檔案讀入,存放於集合或陣列中
2. 將集合內的元素還原成乘法表的矩陣
3. 將結果列印至螢幕

這是三上 SCJP 的作業
主要是要去讀取一個檔案
裡面存的是一個 n*m 的值(1 &lt= n,m &gt= 9),譬如說:

1 2 3 4 5 6 7 8 2 4 6 8 10 12 14 16 3 6 9 12 15 18 21 24

以上是一個 3*8 的乘法表,每個值中間都會有一個空格

那題目主要是讀取檔案並存入集合或陣列再將每個值還原成 n*m 的格式 

以下是我的程式:



import java.io.*;
public class A9628316
{
public static void main(String[] args)
{
int SIZE = 0;
int count = 0;
int check = 0;
int flag = 0;
String[] string = null; //存放乘法值的陣列
File file = new File("9X9.txt");
FileInputStream fi = null;
byte[] buffer = new byte[1];

try{
fi = new FileInputStream(file); //以位元格式讀取檔案
string = new String[81]; //最多只有81個值
if(!file.exists()){
System.out.println("The file of 9X9.txt is not exist");
}
else
{
while(fi.read(buffer) != -1 )
{
if(buffer[0] == 32){ //讀到空格, 迴圈繼續
continue;
}
else //讀到非空格, 有兩種狀況
{
String s1 = new String(buffer);
fi.read(buffer); //再讀取一個字元
if(buffer[0] != 32) //下一個還是數字 : 十位數
{
String s2 = new String(buffer);
s1 = s1 + s2;
string[count] = s1;
count++;
}
else //下一個是空格 : 各位數
{
string[count] = s1;
count++;
}
}
}
}
}
catch(Exception e){}
for(int i=0;i< count;i++) //找出第二個 2, 即可得知 m
{
if(check == 1 && string[i].equals("2"))
{
flag = i;
break;
}
if(string[i].equals("2")){
check++;
}
}
if(flag == 0){
//當 flag = 0 , 就是代表乘法表為 1*m
}
int row, lin;
row = flag;

lin = ( (Integer.parseInt(string[count-1])) / flag );
for(int a=1;a<=lin;a++)
{
for(int b=1;b<=row;b++){
System.out.print(a + "*" + b + "=" + a*b + " ");
}
System.out.println();
}
}

沒有留言:

張貼留言