【问题标题】:Returning a string from a method defined in another class returns nothing从另一个类中定义的方法返回字符串不返回任何内容
【发布时间】:2014-01-25 20:32:41
【问题描述】:

我已经阅读并试图找到答案,但一直无法找到。我创建了一个在其自己的类中工作的方法,具有两个字符串参数,然后使用它们返回一个字符串值。然后我试图在另一个类中调用一个类中定义的这个方法,但我得到一个空指针异常。我已经尝试了几件事,测试了不同的方法来做到这一点,但一直无法让它发挥作用。请原谅我糟糕的编程约定,我才刚刚开始。这是返回字符串的方法:

public class Cipher {   

public  static String encrypt(String Tobeencrypted , String key) 
{                   
   row row[] = new row[26];


   for (int counter = 0; counter < 26 ; counter++ )
   {
      row[counter] = new row();

      for (int counter2 = 0; counter2 < 26 ; counter2++){
          int charnumber = counter + 97 + counter2;
              if (charnumber > 122){
                  charnumber = charnumber - 26;
              }
          row[counter].alpha[counter2] = (char)(charnumber);
      }
   }

   int numberofcharacters = Tobeencrypted.length();
   int keylength = key.length();
   char keychar[] = new char[numberofcharacters];

   int keyindexvalue = 0;
   for (int counter = 0 ; counter < numberofcharacters ; counter++){
   if (keyindexvalue == keylength) 
           keyindexvalue = keyindexvalue - keylength;
       keychar[counter] = key.charAt(keyindexvalue++); 
   }

   char textchars[] = new char[numberofcharacters];
     for (int counter = 0 ; counter < numberofcharacters ; counter++){
     textchars[counter] = Tobeencrypted.charAt(counter);
   }
   String encryptedstring = "";
     for (int counter = 0 ; counter < numberofcharacters ; counter++){
     textchars[counter] = row[(int(keychar[counter])-97].alpha[(int)                       
         (textchars[counter])-97];
     encryptedstring = encryptedstring + textchars[counter];    
     }
     return encryptedstring;
 }

当我在 Cipher 类中有一个 main 方法使用它时,此方法非常有效。但在以下代码中使用该方法时,该方法不返回任何内容。这些文件都在同一个源文件夹中:

 public class testingmethod {

public static void main(String[] args)  {
    try {
    Scanner diskScanner = new Scanner(new         File("C:/Users/Isaac/Desktop/test.txt"));

    int counter = 0;
    String random ="";
    while ( diskScanner.hasNext()){

        random = diskScanner.next();
        counter++;      
    }
    //counter tells you the exact amount of strings there are if there are 10   strings counter = 10
    String strings[] = new String[counter];
    int counter2 = 5;
    while ( diskScanner.hasNext()){
        strings[counter2] = diskScanner.next();
        counter2++;     
    }
    String encrypted[] = new String[counter];
    Cipher cipher = new Cipher();
    PrintStream diskWriter = new PrintStream(new File("C:/Users/Isaac/Desktop/test.txt"));
    String password = JOptionPane.showInputDialog("What password would you like to use? (please make this one word)");
    for ( int counter3 = 0 ; counter3 < counter ; counter3++){
        encrypted[counter3] = cipher.encrypt(strings[counter3], password);
        diskWriter.print(encrypted[counter3] + "    ");
        if(counter3 % 11 == 0) diskWriter.println("");
    }


    } catch (FileNotFoundException e1) {

        e1.printStackTrace();}

}

}

我已根据您所有可爱的帮助进行了更改,并且打印语句有效,但现在我有一个空指针异常,这是我使用 tobeencrypted = String() 解决的问题。

错误是:

    Exception in thread "main" java.lang.NullPointerException
at introtojava.Cipher.encrypt(Cipher.java:43)
at introtojava.testingmethod.main(testingmethod.java:34)

非常感谢,

艾萨克

【问题讨论】:

  • 试试println 而不是print?也许标准输出没有被刷新。
  • 在您的建议后尝试过,但仍然没有返回任何内容
  • 他们给你的答案是正确的。我建议开始使用 Java 代码约定编写代码,因为每个人(包括未来你自己)都会更容易理解您的代码:)
  • 问题是我忘记了它们,我确实尝试过,但全神贯注于试图让它工作却忘记了
  • 第 43 行是什么???

标签: java string class methods return


【解决方案1】:

您故意丢失了参数对要使用此行加密的字符串的引用:

Tobeencrypted = new String();

然后你得到那个字符串的长度,现在是 0:

int numberofcharacters = Tobeencrypted.length();

所以,这个for 循环中没有迭代:

for (int counter = 0 ; counter < numberofcharacters ; counter++){

这是您构建返回字符串的位置,encryptedstring

看起来你可以删除这一行:

Tobeencrypted = new String();

【讨论】:

  • 你是一个创造奇迹的明星伙伴,我这样做是有理由解决另一个问题,但当我删除它时它不会再次出现这个问题,所以一切都很好,谢谢!!!
  • 现在我删除了该评论并使用完整的方法现在我从某处得到一个空指针异常
【解决方案2】:

从删除线开始

Tobeencrypted = new String();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多