【问题标题】:Java, Passing a String from one method to anotherJava,将字符串从一种方法传递到另一种方法
【发布时间】:2011-06-16 23:28:25
【问题描述】:

我希望有人可以帮助我,我需要将一个字符串从下面的方法传递给下面的方法。我查看了互联网并让它在测试程序上运行,但似乎无法让它在我的上运行,已经 3 小时,3 页谷歌和一本书哈哈。对不起,如果这很容易,但我真的不知道。

我需要做什么...我需要将变量“Hex”从方法“WMDBAudio”传递给方法“hexConverter”。我希望这是有道理的,提前感谢您的帮助,这是很重要的!

public class WMDBAudio{
public String WMDBAudio1(String fileInfo) throws IOException{

//code removed as there is quite a lot

int m = 0;
                    while (m != 1){
                        for (int count = 0; count < 3; count++){

                            hexIn = in.read();
                            s = Integer.toHexString(hexIn);
                            if(s.length() < 2){
                                s = "0" + Integer.toHexString(hexIn);
                            }
                            temp = temp + s;
                        }
                        if ("000000".equalsIgnoreCase(temp)){
                            m = 1;
                            hex = entry;
                        }
                        entry = entry + temp;
                        temp = "";
                    }

}
}

//十六进制转换方法

public class hexConverter{

    public static void hexConverter(String t){

        WMDBAudio w = new WMDBAudio();

        String hex = "";

        StringBuilder output = new StringBuilder();
        for (int i = 0; i < hex.length(); i+=2){
            String str = hex.substring(i, i+2);
            output.append((char)Integer.parseInt(str, 16));
        }
        System.out.println(output);
    }
}

【问题讨论】:

  • 这似乎是一项简单的任务,除非您所做的事情与您所描述的完全不同。只需调用 hexConverter.hexConverter(Hex) 就可以为您完成这项工作。您能否粘贴您遇到的异常。

标签: java string methods


【解决方案1】:

按照惯例,Java 类的名称以大写字母开头。所以 hexConverter 应该重命名为 HexConverter。

您通常以这种格式从一个类中调用另一个类:

MyClass myClass = new MyClass();

之后,您可以使用 myClass 对象访问 MyClass 的方法(不是私有的)。

按照我的评论更改以下 2 行。

public class WMDBAudio{
    public String WMDBAudio1(String fileInfo) throws IOException{

//code removed as there is quite a lot

int m = 0;
                while (m != 1){
                    for (int count = 0; count < 3; count++){

                        hexIn = in.read();
                        s = Integer.toHexString(hexIn);
                        if(s.length() < 2){
                            s = "0" + Integer.toHexString(hexIn);
                        }
                        temp = temp + s;
                    }
                    if ("000000".equalsIgnoreCase(temp)){
                        m = 1;
                        hex = entry;
                    }
                    entry = entry + temp;
                    temp = "";
                }
                //add these 2 lines
                hexConverter hexConv = new hexConverter();
                hexconv.hexConverter(hex); 

} }

【讨论】:

    【解决方案2】:

    由于 hexConverter 是 hexConverter 类中的静态方法, 您可以访问该方法

    hexConverter.hexConverter(hex);
    

    您无需创建新对象即可访问该方法。该方法执行普通操作并且不改变对象的状态。因此,您可以像上面一样使用它,传递字符串并获取结果。 如果 hexConverter 类位于不同的包中,您可能还需要导入它。

    【讨论】:

      【解决方案3】:

      您可以将 hex 设置为类的私有属性,因此这两种方法(以及同一类的所有其他方法)都可以访问。

      假设调用第一个不一定需要调用第二个。如果是这种情况,那么您可以从 WMDBAudio 调用 hexConverter,并为 hex 字符串添加一个额外的参数。


      编辑: Nvm 刚刚看到它们是两个不同的类。好吧,您可以将十六进制保存为两个类的私有变量,并在 WMDBAudio 类上使用 GetHex() 方法。然后,您使用该方法返回的值创建一个 hexConverter 类,该类将 Hex 作为其构造函数的参数,从而允许进行以下操作:

      WMDBAudio audio = new WMDBAudio()
      ...
      hexConverter hexconv = new hexConverter(audio.GetHex())
      

      或者只是为 hexConverter 函数提供一个附加参数,允许您编写如下内容:

      WMDBAudio audio = new WMDBAudio()
      ...
      hexConverter hexconv = new hexConverter()
      hexconv.hexConverter(audio.GetHex())
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-29
        • 1970-01-01
        • 1970-01-01
        • 2018-03-10
        • 1970-01-01
        相关资源
        最近更新 更多