2011-10-11 73 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"); 
    }