我可以修改char数组中的元素,但我无法修改另一个元素

时间:2014-03-05 23:26:41

标签: java arrays char

我有一个二进制字符串,我将它转换为char数组 为了修改的目的。我想做的就是随机生成索引p, 查看该元素,如果它是0,则将其设为1,如果1为1则使其为0 .... 它适用于转换1,但它不能将0转换为1!

    public class CS2004 
        {
            //Shared random object
            static private Random rand;
   //Create a uniformly distributed random integer between aa and bb inclusive
            static public int UI(int aa,int bb)
            {
            int a = Math.min(aa,bb);
            int b = Math.max(aa,bb);
            if (rand == null) 
            {
                rand = new Random();
                rand.setSeed(System.nanoTime());
            }
            int d = b - a + 1;
            int x = rand.nextInt(d) + a;
            return(x);
        }

    public class ScalesSolution
    {

    private String scasol;

    public void SmallChange(){

            int p;
            int n = scasol.length();
// converts the string into a char array so that we can access and modify it

            char [] y = scasol.toCharArray();

            // random integer p that ranges between 0 and n-1 inclusively
                    p = CS2004.UI(0,(n-1));
                    System.out.println(p);
        // we changing the element at index p from 0 to 1 , or from 1 to 0
        // cant convert from 0 to 1 !!!!! yet, it works for converting 1 to 0!  
                         if(y[p] == 0){
                y[p] = '1';

            } else {
                y[p] = '0';
            }

            // Now we can convert the char array back to a string 
            scasol = String.valueOf(y);
        }

        public void println()
        {
            System.out.println(scasol);
            System.out.println();
        }

    }

    public class Lab9 {

        public static void main(String[] args) {

            String s = "1100";

            ScalesSolution solution = new ScalesSolution(s);
            solution.println();

            // FLIPPING THE '1' BUT NOT FLIPPING THE '0'
            solution.SmallChange();
            solution.println(); 

        }

    }

3 个答案:

答案 0 :(得分:3)

字符“0”的整数值不是0.它是48.因此以下测试不正确:

if(y[p] == 0) {

应该是

if(y[p] == 48) {

或更具可读性:

if(y[p] == '0') {

答案 1 :(得分:2)

你不应该比较那样的人物!

if(y[p] == '0'){

答案 2 :(得分:0)

JavaString存储Unicode characters,在您的情况下,字符'0'的Unicode为48.因此,您可以像这样进行比较:

 if(y[p] == '0')

或者

 if(y[p] == 48)