2011-10-11 75 views
0

它已經有一段時間了,因爲我上次使用了java,並且試圖刷新幾件事情。java數組列表

import java.util.*; 

public class bitStrings { 
    public static void main(String [] args){ 

     Scanner inputBitString = new Scanner(System.in);   

     //input. 
     String binArray; 

     ArrayList<String> myArr = new ArrayList<String>(); 

     while(inputBitString.hasNext()){ 

      binArray=inputBitString.next();   
      myArr.add(binArray); 
      System.out.println(myArr);  

      for(int i=0;i<myArr.size();i++){ 
       if(myArr(i)=="1") myArr(i)=="10"; 
       else myArr(i)=="01" 
      } 
     } 

    } 

} 

所以我想從用戶的鍵盤輸入存儲在數組中的輸入。所以如果用戶鍵入「1010」,for循環將通過數組並將「1」替換爲「10」和「0」替換爲「01」。 所以輸出結果將是 「10011001」

感謝

+2

這裏有什麼問題?即代碼的哪一部分不工作 - 獲取用戶輸入或將其更改爲編碼值? – James

+0

我同意詹姆斯的看法,這個問題還不清楚。 – Rob

+0

對不起。代碼不會在for循環中編譯。 – Jay

回答

0

您可以使用此:

ArrayList<String> myArr = new ArrayList<String>(); 
ArrayList<String> myArrDub = new ArrayList<String>(); 
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); 
String str = bf.readLine(); 

for (int i=0; i<str.length(); i++) { 
    String tempStr = new String(); 
    tempStr += str.charAt(i); 
    myArr.add(tempStr); 
} 

System.out.println(myArr); 

for(int i=0;i<myArr.size();i++){ 
    if(myArr.get(i).equals("1")) 
    myArrDub.add("10"); 
else 
    myArrDub.add("01"); 
} 
+0

你應該使用'.equals'而不是'=='來比較字符串 – James

+0

right)hurried) – TorchTT

2

比較String內容,你應該使用equals

myArr.get(i).equals("1"); 

否則,你是比較對象引用。

2

我想說你的代碼不會編譯或工作正常。我會寫這樣的:

if("1".equals(myArr.get(i))) { 
    myArr.set(i, "10"); 
} else { 
    myArr.set(i, "01"); 
} 

講究風格 - 它很重要,即使有這樣的一個簡單的例子。

起初沒有注意到使用List

+0

它仍然給我一個錯誤。 – Jay

+2

你有很多想法。 – duffymo

+0

這將錯誤,它不訪問列表(你應該使用get(i)方法) – James

0

一般而言,當您迭代它時,您不能(或不應該)修改列表。如果是我,我會將編碼值存儲在一個新的(可能是臨時的)ArrayList中,然後在完成後重新分配舊的值。

如前所述,您應該使用.equals not ==比較字符串。此外,讀取列表中的值的語法是myArr.get(i);不像你用過的那樣myArr(i)

此外,當您使用Scanner#next()時,它將返回一個字符串,因此如果用戶輸入「1010」,則整個序列將存儲在單個元素中,每個字符都不會獲得其自己的索引。

最後,按照慣例,類名應該以大寫字母開頭。

這是我該怎麼做(使用控制檯,而不是掃描儀)。我相信這是你後的效果:

import java.io.*; 
import java.util.*; 


public class BitStrings{ 

    public static void main(String[] args){ 

     Console c = System.console(); 
     List<String> myArr = new ArrayList<String>(); 
     if(null == c){ 
      //exit gracefully 
     } 

     String entry = c.readLine("Enter the bits: "); // Wait for user entry 

     for(int i = 0; i < entry.length(); i++){ 
      String bit = entry.substring(i, i+1); 
      if("1".equals(bit)) myArr.add("10"); 
      else myArr.add("01"); 
     } 
     //If we want to print it out 
     for(String element : myArr) System.out.print(s); 

    } 



} 
0

這可能不是最有效的方式,但它的工作原理:

public class Main { 

    public static void main(String[] args) { 
     String user = "1010"; 
     StringBuilder sb = new StringBuilder(); 
     for (char c : user.toCharArray()) { 
      if (c == '1') 
       sb.append("10"); 
      else 
       sb.append("01"); 
     } 
     System.out.println(sb); 
    } 
} 
+0

這不是從 – Hristo

+0

中的標準讀取用戶輸入我的目的是解決他問的關於什麼是替換子字符串。 – blackcompe

+0

夠公平的,只要確保你沒有錯過那部分:) – Hristo

0

正確:

ArrayList<String> myArr = new ArrayList<String>(); 
    BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); 
    String str = bf.readLine(); 
    for (int i=0; i<str.length(); i++) 
     myArr.add("" + str.charAt(i)); 

    for(int i=0;i<myArr.size();i++){ 
     if(myArr.get(i).equals("1")) 
      myArr.set(i, "10"); 
     else 
      myArr.set(i, "01"); 
    }