我正在嘗試構建一個學校作業的程序,該程序可生成傳遞閉包給定的一組函數依賴關係。我正在使用JAVA。爲了使它識別字符串子集,我必須構建一個名爲Attribute
的類,由char和布爾字段組成(以幫助進一步識別包含字符序列的字符串令人費解的地圖行爲
然後,我有一個名爲FunctionalDependency的類,它只具有兩個映射 <Integer, Attribute>
。 第一圖表示左手和屬性的第二右手。
最後我的主要程序,它實際calculationhas地圖的Integer,FunctionalDependency
一個,這表示該用戶希望將依賴集輸入。我的問題位於方法insertFD()
,更具體地說在第一個for{}
塊。在for塊中,映射似乎具有我想要的值,在它之外(意思是在最後一次調用循環之後),它會複製到映射的最後一個字符的地圖的所有位置,從而破壞進一步的計算。
/*The method for inserting a new FD*/
public void insertFD() throws IOException{
Map<Integer, Attribute > tempMapLeft= new HashMap<Integer,Attribute>();
Map<Integer, Attribute > tempMapRight= new HashMap<Integer,Attribute>();
Attribute tempAttrLeft = new Attribute();
Attribute tempAttrRight = new Attribute();
FunctionalDependency tempDependency=new FunctionalDependency();
String tempString;
BufferedReader stdin = new BufferedReader (new InputStreamReader(System.in));
System.out.println("Please give the string for the left hand:");
System.out.flush();
tempString=stdin.readLine();
tempString.toUpperCase();
System.out.println("Your input is "+tempString);
for(int j=0;j<tempString.length();j++)
{
System.out.println("for j="+j+"letter is "+(tempString.toCharArray()[j]));
tempAttrLeft.setTheCharacter(tempString.toCharArray()[j]);
tempAttrLeft.setCheck(true);
tempMapLeft.put(j, tempAttrLeft);
System.out.println("I just inserted "+ tempAttrLeft.getTheCharacter());
System.out.println("Here is the proof: "+tempMapLeft.get(j).getTheCharacter());
}
System.out.println(tempMapLeft.get(0).getTheCharacter());
System.out.println(tempMapLeft.get(1).getTheCharacter());
tempDependency.setLeftHand(tempMapLeft);
//fSet.put(number, tempDependency);
//fSet.get(number).setLeftHand(tempMapLeft);
System.out.flush();
System.out.println("Your left hand is at 0 "+ tempDependency.getLeftHand().get(0).getTheCharacter());
System.out.println("Your left hand is at 1 "+ tempDependency.getLeftHand().get(1).getTheCharacter());
我沒有任何Java專家,但我看不到我的代碼錯誤,我會很高興,如果你能幫助我,在此先感謝。
你會得到更有效的幫助,如果你不不要把你的全部代碼轉儲給我們,而是花點時間只提供**相關的**代碼。換句話說,仔細檢查你的代碼,並將其解釋爲展示問題的*最小*示例。請參閱http://sscce.org。 –
一個無關的提示:你可以省略'System.out.flush()'調用; 'println'會自動刷新流,除非你不想讓它失敗。 –
謝謝!現在編輯問題! – Damerian