使用两个班级?其中一个中的方法错误

时间:2018-03-21 14:01:13

标签: java class object methods

所以基本上我必须反向打印出worker的名字,然后逐个字符地循环遍历字符串。这就是我在Worker.java下对该方法所拥有的:

public String printRev(String fName) {

    for (int i = 0; i < fName.length(); i++) {
           fName = fName.charAt(i) + fName;     
    }
    return fName;
}

对于UseWorker.java,我有:

anil.printRev();
jasmin.printRev();
fred.printRev();

但是它给了我错误信息:&#34; Worker类型中的方法printRev(String)不适用于arguments()。&#34;

还值得一提的是,我不允许修改UseWorker,只允许修改工人。

我该如何解决问题?

3 个答案:

答案 0 :(得分:0)

我看到几个问题:

  1. 当您致电printRev时,您不会提出任何争论,而是期望String
  2. 您创建的字符串肯定不是您期望的字符串。您需要将结束中的字符连接到开头,而不保留旧值。
  3. 命名不正确:您不打印任何内容。将其重命名为revert()getReverted()
  4. 以下是修正提案:

    public String getReverted(String fName) {
        StringBuilder revName = new StringBuilder(fName.length());
        for (int i = fName.length(); i >0; i--) {
               revName.append(fName.charAt(i - 1));     
        }
        return revName.toString();
    }
    

    ......你这么称呼它:

    System.out.println(anil.printRev("string to revert"));
    

答案 1 :(得分:0)

好吧,通过声明像这个public static void encrypt(Context ctxt, File originalFile, char[] passphrase) throws IOException { SQLiteDatabase.loadLibs(ctxt); if (originalFile.exists()) { File newFile= File.createTempFile("sqlcipherutils", "tmp", ctxt.getCacheDir()); SQLiteDatabase db= SQLiteDatabase.openDatabase(originalFile.getAbsolutePath(), "", null, SQLiteDatabase.OPEN_READWRITE); db.rawExecSQL("ATTACH DATABASE '" + newFile.getAbsolutePath()+ "' AS encrypted KEY '"+String.valueOf(passphrase)+"'"); db.rawExecSQL("SELECT sqlcipher_export('encrypted')"); db.rawExecSQL("DETACH DATABASE encrypted"); int version=db.getVersion(); db.close(); db=SQLiteDatabase.openDatabase(newFile.getAbsolutePath(), passphrase, null, SQLiteDatabase.OPEN_READWRITE); db.setVersion(version); db.close(); originalFile.delete(); newFile.renameTo(originalFile); } } 这样的函数,你说“我想要一个名为public String printRev(String fName)的函数,它返回printRev的实例并且接受{{1}类型的一个参数(并且String具有String访问权限,但现在无关紧要。)

语句public表示“从变量anil.printRev();获取对象,并使用名称anil调用函数,并在其上设置零参数。事实上,没有定义这样的方法,如您定义的那样它是一个带有一个参数的方法。

您可能要做的是printRev,意思是“使用名称为printRev("Anil");的方法和类型为printRev的一个参数”,提供String对象(字符串)到它的第一个参数并执行它。“

此外,rev功能将无法正常工作。您一直在向"Anil"添加一个字符,然后从中读取,就好像它没有变化一样。您需要复制并向副本添加字符。喜欢这个

fName

(请注意,此方法可以进一步优化,但超出了此问题的范围)

答案 2 :(得分:0)

我发现您无法修改UseWorker.java,因此您必须对其他类进行更改。目前,您的方法需要将String作为参数传递,但显然Useworker类不希望您传递任何参数。 为此,您必须在可以修改的类中创建fName。 例如,如果您的班级是人物,请尝试:

public class Person{
    String fName;

    public Person(String fName){
        this.fName = fName;
    }

   public String printRev(){
        String result = "";
        for (int i = 0; i < fName.length(); i++) {
            result = fName.charAt(i) + result;     
        }
        return result;
   }
}