Java 错误:不兼容的类型:无法将void转换为NumPal

Java 错误:不兼容的类型:无法将void转换为NumPal,java,constructor,main,Java,Constructor,Main,我已经阅读了很多关于这个问题的文章,大多数似乎都是通过修复main方法来解决的。然而,任务的一部分是我们不能改变努帕尔德维尔。 由于我不完全理解这个问题,我还能如何解决它 这是给定的主代码: import javax.swing.JOptionPane; public class NumPalDriver { public static void main(String[] args){ String start = JOptionPane.showInputDialog("Ent

我已经阅读了很多关于这个问题的文章,大多数似乎都是通过修复main方法来解决的。然而,任务的一部分是我们不能改变努帕尔德维尔。 由于我不完全理解这个问题,我还能如何解决它

这是给定的主代码:

import javax.swing.JOptionPane;
public class NumPalDriver {

  public static void main(String[] args){
    String start = JOptionPane.showInputDialog("Enter a number: ");
    System.out.println("start value ["+ start + "]");
    NumPal p = new NumPal(start);
    int ctr = 0;
    while (!p.pal() && (ctr < 10)){
      System.out.println(p.toString());
      System.out.print("new sum: ");
      System.out.println(p.getCur()+" + "+p.getRev()+ " = " +
                         (p.getCur()+p.getRev() ));
      p = p.next();
      ctr++;
    }
    System.out.println("final value: " + p.getCur());
    System.out.println("number of steps: " + ctr);
  }
}
import javax.swing.JOptionPane;
公共级努帕尔德河{
公共静态void main(字符串[]args){
String start=JOptionPane.showInputDialog(“输入一个数字:”);
System.out.println(“起始值[“+start+”]);
NumPal p=新的NumPal(开始);
int ctr=0;
而(!p.pal()&&(ctr<10)){
System.out.println(p.toString());
系统输出打印(“新金额:”);
System.out.println(p.getCur()+“+”+p.getRev()+“=”+
(p.getCur()+p.getRev());
p=p.next();
ctr++;
}
System.out.println(“最终值:+p.getCur());
System.out.println(“步数:+ctr”);
}
}
我的代码使主要功能成为可能:

public class NumPal{ //header

private long numRev; //initializes variables
private long numCur;
private String stringRev;
private String stringCur;

public NumPal(String stringCur){//constructor
this.stringCur = stringCur;
}

public boolean pal(){

   if (stringCur == stringRev){
      return true;}
   else {
     return false;}
     }

public String reverseString (String input){ //creates reverse version of string
   int length = input.length();
   String stringRev = "";
   for(int j = 0; j <= length; j++){
      stringRev = input.charAt(j) + stringRev; 
      }return stringRev;
      }

public void next(){ //where the error is
   stringRev = reverseString(stringCur);
   numRev = Long.parseLong(stringRev);
   numCur = Long.parseLong(stringCur);
   numCur = numCur + numRev;
   stringCur = Long.toString(numCur);
   }

public String getCur(){ // returns current string
   return stringCur;
   }

public String getRev(){ // returns reverse string
   return stringRev;
   }
}
公共类NumPal{//header
private long numRev;//初始化变量
私人长努姆库尔;
私有字符串stringRev;
私有字符串stringCur;
公共NumPal(字符串stringCur){//构造函数
this.stringCur=stringCur;
}
公共布尔pal(){
if(stringCur==stringRev){
返回true;}
否则{
返回false;}
}
公共字符串反转字符串(字符串输入){//创建字符串的反转版本
int length=input.length();
字符串stringRev=“”;

对于(int j=0;j在你的NumPalDriver上的以下行

p = p.next();
需要NumPal类中的next()方法返回NumPal对象(或null)。当前代码不返回任何内容。请重写它以返回NumPal

即:


在你的NumPalDriver上跟我走

p = p.next();
需要NumPal类中的next()方法返回NumPal对象(或null)。当前代码不返回任何内容。请重写它以返回NumPal

即:


你能分享一个堆栈跟踪吗?我试过用谷歌搜索什么是堆栈跟踪,我不知道怎么做对不起。你能分享一个堆栈跟踪吗?我试过用谷歌搜索什么是堆栈跟踪,我不知道怎么做对不起。啊,我现在明白了,谢谢你,我该如何在方法中操作对象呢?如果你想操作e当前对象将以下内容添加到next()方法的末尾[this.stringCur=stringCur;返回此;]是的,我知道了。谢谢你的帮助,我对返回对象的理解是完全错误的,但我现在完全明白了。啊,我现在明白了,谢谢你,我该如何在方法中操作对象呢?如果你想操作当前对象,请在next()方法的末尾添加以下内容[this.stringCur=stringCur;返回此;]是的,我找到了答案。谢谢你的帮助,我对返回对象的理解完全错误,但我现在完全明白了。