2016-02-14 98 views
-1

問題是想象一個程序,它將文件壓縮到其原始大小的80%並將它們存儲在存儲介質上。在壓縮文件存儲之前,必須將其分成512個字節的塊。編寫一個程序,首先讀取存儲介質上可用的塊數。然後,在循環中,讀取文件的未壓縮大小,並確定壓縮文件是否適合存儲介質上的剩餘空間。如果是這樣,程序應該壓縮並保存文件。它會一直持續到遇到超出媒體可用空間的文件。while while if loop code error

然而,我的代碼保持返回是不正確的整數....

import java.util.Scanner; 

public class HW2Q2 

{ 

public static void main(String[] args) 

{ 

int size; 

Scanner keyboard = new Scanner(System.in); 

System.out.println("Enter the number of blocks available"); 

size=keyboard.nextInt(); 

System.out.println("Available number of blocks is " + size); 

int filesize; 


while(size!=0) 

{ 

System.out.println("Enter the size of the file that is to be stored"); 

filesize=keyboard.nextInt(); 

filesize=filesize/512*80/100; 



System.out.println("compressed file size is " + filesize); 

if(filesize>size) 

{ 

System.out.println("the number of blocks available, " + size + " is less than the required number, " + filesize); 

break; 

} 

else 
size=size-filesize; 
{ 
System.out.println("available number of blocks is " + size); 

} 

} 

}} 

回答

1

你從來就不是一個新的值賦給variabe size,但僅限於sizenew。所以當你最終打印出沒有可用空間時,它將打印出原始尺寸。

+0

對不起,我是全新的,你能解釋新價值需要去哪裏嗎? –

+1

那麼,在文件適合驅動器的情況下,您可以計算'sizenew = size - compsize'即。寫入文件後的大小是當前可用大小減去您寫入文件的大小。因此,在下一個循環中,您必須將其與新尺寸進行比較,而不是舊尺寸。因此,只需將newsize變量完全刪除,並將新大小賦值給size變量,即'size = size - compsize';因此,在循環的每次迭代中,可用的大小將相應地減少 – derpirscher

+0

我接受了您的建議並更改了變量,但現在我的數學出錯了,例如,如果輸入「50」,那麼「25000」它返回壓縮文件是38個塊,還有12個塊,但25000/512 * 80/100 = 39.06這應該出來40作爲一個int權利?我編輯了上面的代碼來顯示我的更改。 –