【问题标题】:error: incompatible types: void cannot be converted to NumPal [duplicate]错误:不兼容的类型:void 无法转换为 NumPal [重复]
【发布时间】:2018-12-02 10:56:04
【问题描述】:

我已经阅读了很多关于这个问题的帖子,大多数似乎都可以通过修复 main 方法来解决。然而,部分任务是我们不能改变 NumPalDrvier。 由于我不完全理解,我还能如何解决这个问题?

这是给定的主要代码:

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);
  }
}

我的代码使主要成为可能:

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;
   }
}

如果有人可以分解此错误的含义,将不胜感激!

【问题讨论】:

  • 你能分享一个堆栈跟踪吗?
  • 我试过谷歌搜索堆栈跟踪是什么,但我不太清楚该怎么做对不起。

标签: java constructor main


【解决方案1】:

NumPalDriver 上的以下行

p = p.next();

期望 NumPal 类中的 next() 方法返回 NumPal 对象(或 null)。当前代码不返回任何内容。重写它以返回一个 NumPal

即:

public NumPal next(){ 
    // return a NumPal, possibly following
    // existing code of this method goes here
    return new NumPal(stringCur)
}

【讨论】:

  • 啊,我明白了,谢谢,但是我该如何在方法中操作对象呢?
  • 如果要操作当前对象,请将以下内容添加到 next() 方法的末尾 [ this.stringCur = stringCur;返回这个; ]
  • 是的,我想通了。感谢您的帮助,我对返回对象的理解完全错误,但我现在完全明白了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-23
  • 2015-04-28
  • 2016-01-12
  • 2019-04-18
  • 2021-04-27
  • 1970-01-01
相关资源
最近更新 更多