【问题标题】:In java, how would I add a string to a string variable?在java中,如何将字符串添加到字符串变量?
【发布时间】:2012-02-23 10:14:33
【问题描述】:

我的代码生成 0-1 形式的随机数 3 次,我需要将它添加到变量中,以便它变成二进制数。所以,理论上,这将运行 3 次,可能会给我 101 ;

String storage = null;
        int i = 0;
        while (i < 3) {
            int binny = this.giveMeBinary();
            storage.concat(String.valueOf(binny));
            i++;
        }

        int ans = Integer.parseInt(storage);

但是当我尝试运行它时,我收到 NullPointerException 存储错误。有没有办法将字符串“添加”到变量中?

giveMeBinary 方法只返回 0 或 1。

【问题讨论】:

  • 还要注意storage.concat(...)不会改变storage的值。你需要做storage = storage.concat(...)
  • 顺便说一句,如果您的目标是ans 而不是storage,您可以使用位运算轻松完成:while(i&lt;3) {ans &lt;&lt;= 1; ans |= this.giveMeBinary();i++;}whle(i&lt;3) { ans |= this.giveMeBinary()&lt;&lt;i;i++;}
  • ahhhhh 是的......我明白你的意思......它不会将新值存储到存储中。

标签: java string random int


【解决方案1】:

您收到 NullPointerException 是因为您将变量 storage 设置为 null。你应该从

String storage = "";

【讨论】:

  • ... 然后在Integer.parseInt 中得到一个异常,因为storage 在循环之后仍然引用一个空字符串?
【解决方案2】:

纠正NullPointerException后,试试这个:

storage = storage + String.valueOf(binny)

...然后阅读StringBuilder

【讨论】:

    【解决方案3】:

    你有两个问题:

    • 您永远不会为storage 分配非空值,但您正在调用concat 方法。那总是会抛出NullPointerException

    • 您假设String.concat 将修改现有的字符串值。它没有。字符串在 Java 中是不可变的。

    我建议改用StringBuilder,并在循环中调用append

    int i = 0;
    StringBuilder builder = new StringBuilder();
    while (i < 3) {
        int binny = this.giveMeBinary();
        builder.append(binny);
        i++;
    }
    int ans = Integer.parseInt(builder.toString());
    

    为什么你要解析一个二进制数字,比如“011”,就好像它是一个十进制数字一样,这是另一回事。你真正想要的结果是什么?你真的想要数字 0、1、10、11、100、101、110 还是 111?

    【讨论】:

      【解决方案4】:

      试试这个:

      String storage = "";
      

      【讨论】:

        【解决方案5】:

        它抛出 NullPointerException 因为 storage 为空。试试下面的

        StringBuilder storage = new StringBuilder();
                int i = 0;
                while (i < 3) {
                    int binny = this.giveMeBinary();
                    storage.append(String.valueOf(binny));
                    i++;
                }
        
                int ans = Integer.parseInt(storage.toString());
        

        【讨论】:

          【解决方案6】:

          如果你想使用字符串连接,那么只需将存储初始化为“”(空字符串)然后使用

          storage += String.valueOf(binny);
          

          但如果你正在循环和构建字符串,你应该真正使用 StringBuilder,因为字符串是不可变的

          StringBuilder buffer = new StringBuilder();
          

          然后

          buffer.append(binny);
          

          【讨论】:

            【解决方案7】:

            您的问题是您将字符串初始化为空。这样做应该可以解决您的问题:

                    String storage = "";
                    int i = 0;
                    while (i < 3) {
                        int binny = this.giveMeBinary();
                        storage += (String.valueOf(binny));
                        i++;
                    }
            
                    int ans = Integer.parseInt(storage);
            

            但是,不建议以这种方式连接字符串。你可以做的是像这样使用StringBuilder

                    StringBuilder storage = new StringBuilder();
                    int i = 0;
                    while (i < 3) {
                        int binny = this.giveMeBinary();
                        storage.append(String.valueOf(binny));
                        i++;
                    }
            
                    int ans = Integer.parseInt(storage.toString());
            

            【讨论】:

              【解决方案8】:

              变量存储未初始化..以下代码将抛出 NPE

              storage.concat(....)
              

              【讨论】:

                【解决方案9】:

                您得到 NullPointerException 的原因是“存储”变量从未初始化。因此,对“storage.concat”的第一次调用将尝试对 NullPointer 执行操作。

                为了进行字符串连接,您需要使用像 StringBuilder 这样的可变类,String 类是不可变的(您不能修改它的实例)。

                这是一个使用 StringBuilder 的示例:

                StringBuilder storage = new StringBuilder();
                int i = 0;
                while (i < 3) {
                   int binny = this.giveMeBinary();
                   storage.append(binny);
                   i++;
                }
                
                int ans = Integer.parseInt(storage.toString());
                

                【讨论】:

                  【解决方案10】:

                  如果你想要一个二进制数,即 0 到 7 或 000 到 111 之间的随机数。

                  int ans = giveMeBinary() * 4 + giveMeBinary() * 2 + giveMeBinary();
                  

                  但是,如果您想要一个看起来像二进制数的十进制数。

                  int ans = giveMeBinary() * 100 + giveMeBinary() * 10 + giveMeBinary();
                  

                  【讨论】:

                    猜你喜欢
                    • 2023-03-12
                    • 2015-11-14
                    • 2017-09-09
                    • 1970-01-01
                    • 2023-03-17
                    • 1970-01-01
                    • 2015-08-20
                    • 1970-01-01
                    • 2010-12-11
                    相关资源
                    最近更新 更多