2016-04-15 41 views
0

好的,所以我必須編寫一個程序來創建一個名爲Lab13.txt的文件。使用文本I/O將10個隨機生成的[0,99]整數寫入文件。整數在文件中用空格分隔。從文件中讀回數據並將其顯示在控制檯上。 我已經完成了這部分,但接下來我必須在該文件中取這些數字,創建一個新文件,將Lab13.txt文件中的所有數字相乘,並將它們存儲在新文件中。我的問題是當我創建新文件時,我只能將它乘以從Lab13.txt文件打印的最後一個數字。我如何獲得它將Lab13.txt文件中的所有數字乘以10並打印出來?這可能是一個非常簡單的解決方案,我覺得無法想象它是如此愚蠢。創建文件是我們正在學習的新事物,我的老師幾乎沒有任何幫助。 :(我如何在java文件I/O中乘以10所有數字

import java.io.*; 

public class Lab13 { 

    public static void main(String ar[]) { 

     String toWrite = ""; 
     int x=0; 
     try { 

      File file=new File("Lab13.txt"); 
      FileWriter filewriter=new FileWriter(file); 
      BufferedWriter writer=new BufferedWriter(filewriter); 
      for(int i=0;i<10;i++) { 
       x=(int)(Math.random()*100); 
       writer.write(" "+x); 
      } 
      writer.close(); 
     } catch(IOException e) { 
      e.printStackTrace(); 
     } 

     try { 

      File file1=new File("Lab13.txt"); 
      FileReader filereader=new FileReader(file1); 
      BufferedReader reader=new BufferedReader(filereader); 
      String y; 
      while((y=reader.readLine())!=null) { 
       System.out.println(y); 
       toWrite += ("" + x*10); 
       System.out.println(toWrite); 
      } 

     File output = new File("lab13_scale.txt"); 
     if(!output.exists()) output.createNewFile(); 
     FileWriter writer = new FileWriter(output.getAbsoluteFile()); 
     BufferedWriter bWriter= new BufferedWriter(writer); 
     bWriter.write(toWrite); 
     bWriter.close(); 
     } catch(Exception e) { 
     e.printStackTrace(); 
     } 
    } 
} 
+0

先不要用'X:

你可以做的,而不是被讀取文件的全部內容到一個字符串,然後用空格分隔符(以下是未經測試的代碼),把它分解'源於先前的閱讀。 'y'包含數字的當前行。所以你需要從行中得到每個數字。心智乘以十隻會增加一個「0」,但數字「0」除外。 –

+0

你需要遍歷你的數字......現在你正在使用'x'這是最後一個添加到文件中的數字。你需要將你的行分割成一個數組並將每個元素解析爲一個整數,然後將每個元素乘以10. – brso05

+0

你可以在每個單詞中加上'0'。 ;) –

回答

0

你的問題是在這裏:

while((y=reader.readLine())!=null) { 
    System.out.println(y); 
    toWrite += ("" + x*10); 
    System.out.println(toWrite); 
} 

什麼reader.readLine()告訴讀者做的就是尋找一切換行符「\ n」和處理文本塊之間,並且因爲你沒有添加任何,它將整個文件視爲一個塊。

String s = reader.readLine(); 
String[] allNumbers = s.split(" "); 
for(String number : allNumbers) { 
    int currentNumber = Integer.parseInt(number); 
    bWriter.write(String.valueOf(currentNumber * 10) + " "); 
} 
2

你永遠不會從該行讀取個人的數量和x你乘以10是您在前面循環隨機生成的最後一個號碼這就是爲什麼這個問題

刪除線。 -

toWrite += ("" + x*10);

替換 -

String numArray = y.split(" "); for (int i=0; i<numArray.length; i++) { int newNum = Integer.parseInt(numArray[i]) * 10; toWrite += ("" + newNum); }

0
public void multiply() throws Exception{ 
    //reading from existing file 
    BufferedReader br = new BufferedReader(new FileReader("Lab13.txt")); 
    String l = br.readLine(); //assuming from your code that there is only one line 
    br.flush(); 
    br.close(); 
    String[] arr = l.split(" "); 
    //writing into new_file.txt 
    BufferedWriter bw = new BufferedWriter(new FileWriter("new_file.txt")); 
    for(String a : arr){ 
      bw.write((Integer.parseInt(a)*10) + " "); 
    } 
    bw.flush(); 
    bw.close(); 
} 

只要調用這個方法即可。應該管用。你基本上需要使用空格拆分字符串。一旦完成,將每個字符串解析爲整數並相乘。並再次存儲。

0
package com.test; 

import java.io.*; 

public class Lab13 
{ 

    public static void main(String ar[]) 
    { 
     String toWrite = ""; 
     int x = 0; 
     try 
     { 
      File file = new File("Lab13.txt"); 
      FileWriter filewriter = new FileWriter(file); 
      BufferedWriter writer = new BufferedWriter(filewriter); 
      for (int i = 0; i < 10; i++) 
      { 
       x = (int) (Math.random() * 100); 
       writer.write(" " + x); 
      } 
      writer.close(); 
     } catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 


     try 
     { 
      File file1 = new File("Lab13.txt"); 
      FileReader filereader = new FileReader(file1); 
      BufferedReader reader = new BufferedReader(filereader); 
      String y; 
      while ((y = reader.readLine()) != null) 
      { 
       //////////////////////////////////////// 

       //trim - delete leading spaces from y 
       String[] array = y.trim().split(" "); 
       for (int i = 0; i < array.length; i++) 
       { 
        int number = Integer.parseInt(array[i]); 
        System.out.println(number); 
        toWrite += (number * 10 + " "); 

       } 
       System.out.println(toWrite); 
       //////////////////////////////////////// 
      } 


      File output = new File("lab13_scale.txt"); 
      if (!output.exists()) output.createNewFile(); 
      FileWriter writer = new FileWriter(output.getAbsoluteFile()); 
      BufferedWriter bWriter = new BufferedWriter(writer); 
      bWriter.write(toWrite); 
      bWriter.close(); 
     } catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 
}