Java 设置属性/实例变量并在toString()中打印

Java 设置属性/实例变量并在toString()中打印,java,return,Java,Return,我必须返回三角形的面积和周长。我在主文件中创建了两个函数。 这是我的toString()函数: public String toString() { String printPerimeter = "The perimiter is " + perimeter; String printArea = "The area is " + area; return printPerimeter; return printArea; } 然后

我必须返回三角形的面积和周长。我在主文件中创建了两个函数。 这是我的
toString()
函数:

public String toString()
   {
      String printPerimeter = "The perimiter is " + perimeter;
      String printArea = "The area is " + area;
      return printPerimeter;
      return printArea;
   }
然后我将代码上方的周长和面积设置为:

private double area;
private double perimeter;
我的设定器功能:

public double setPerimiter()
   {
      perimeter = (sideA + sideB + sideC);
      return perimeter;
   }

   public double setArea()
   {
      double s = (sideA+sideB+sideC)/2.0;
      area = Math.sqrt(s*((s-sideA)*(s-sideB)*(s-sideC)));
      return area;
   }
我确信我归还的方式有问题。但是它一直在说
Triangle.java:52:error:unreachable语句

  return printPerimeter;
  return printArea;

有什么帮助吗?

一个函数只能返回一条语句

public String toString()
  {
  String printPerimeter = "The perimiter is " + perimeter;
  String printArea = "The area is " + area;

  return printPerimeter; <-- This will be returned

  return printArea; <-- Program control will never reach here 
and hence you are getting the error "unreachable code"

 }

一个函数只能返回一条语句

public String toString()
  {
  String printPerimeter = "The perimiter is " + perimeter;
  String printArea = "The area is " + area;

  return printPerimeter; <-- This will be returned

  return printArea; <-- Program control will never reach here 
and hence you are getting the error "unreachable code"

 }

您可以返回一个
语句。第二个将无法访问。

您1
返回
语句。第二个将无法访问。

将两个字符串连接起来(请参见@Aominècomment):

或者将这两个字符串放入一个数组并返回数组:

String[] dimens = new String[2];
dimens[0] = printPerimeter;
dimens[1] = printArea;
return dimens;

或者分为两个方法
toStringPerimeter()
toStringArea()
将两个字符串连接起来(请参见@Aominècomment):

或者将这两个字符串放入一个数组并返回数组:

String[] dimens = new String[2];
dimens[0] = printPerimeter;
dimens[1] = printArea;
return dimens;

或者分为两个方法
toStringPerimeter()
toStringArea()

,正如其他人所说,您只能有一个return语句。因此,这里有另一个替代实现,将两个输出合并为一个输出

   public String toString()
   {
      StringBuilder sbuilder = new StringBuilder("The perimiter is");
      sbuilder.append(perimeter);
      sbuilder.append("\n");
      sbuilder.append("The area is ");
      sbuilder.append(area);
      return sbuilder.toString();
   }

正如其他人所说,您只能有一个return语句。因此,这里有另一个替代实现,将两个输出合并为一个输出

   public String toString()
   {
      StringBuilder sbuilder = new StringBuilder("The perimiter is");
      sbuilder.append(perimeter);
      sbuilder.append("\n");
      sbuilder.append("The area is ");
      sbuilder.append(area);
      return sbuilder.toString();
   }

当return调用时,这意味着它是一个方法的结束,换句话说,您的第二个return语句永远不会发生。在这种情况下,当您实现toString方法时,应该将两条消息作为一个字符串返回

public String toString() {
    return "The perimiter is " + perimeter + "\nThe area is " + area;
}
也可以使用StringBuilder

public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("The perimeter is ").append(perimeter);
    sb.append("\n");
    sb.append("The area is ").append(area);

    return sb.toString();
}
如果由于某种方法,您希望有两个不同的对象,您需要将其包装在某个包装器中,它将允许您稍后将其展开。例如,它可以是String[]或某个集合,甚至是某个自定义类TwoString,该类声明了2个字符串字段。 带列表的示例

public List<String> getToStrings() {
    List<String> result = new ArrayList<>();
    result.add("The perimiter is " + perimeter);
    result.add("The area is " + area);

    return result;
}
public List getToStrings(){
列表结果=新建ArrayList();
结果。添加(“周长为”+周长);
结果。添加(“面积为”+面积);
返回结果;
}

但是它不会像toString()那样工作,它只是一个如何返回“多个对象”的示例。

当return调用时,它意味着它是一个方法的结束,换句话说,您的第二个return语句永远不会发生。在这种情况下,当您实现toString方法时,应该将两条消息作为一个字符串返回

public String toString() {
    return "The perimiter is " + perimeter + "\nThe area is " + area;
}
也可以使用StringBuilder

public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("The perimeter is ").append(perimeter);
    sb.append("\n");
    sb.append("The area is ").append(area);

    return sb.toString();
}
如果由于某种方法,您希望有两个不同的对象,您需要将其包装在某个包装器中,它将允许您稍后将其展开。例如,它可以是String[]或某个集合,甚至是某个自定义类TwoString,该类声明了2个字符串字段。 带列表的示例

public List<String> getToStrings() {
    List<String> result = new ArrayList<>();
    result.add("The perimiter is " + perimeter);
    result.add("The area is " + area);

    return result;
}
public List getToStrings(){
列表结果=新建ArrayList();
结果。添加(“周长为”+周长);
结果。添加(“面积为”+面积);
返回结果;
}

但它不会像toString()那样工作,它只是一个如何返回“多个对象”的示例。

您不能这样做。第二条语句
返回printArea将永远不会执行。我想您希望
toString()
返回值
返回printpermiture+printparea
。不相关,但是为什么setter不接受参数并返回值呢?在我看来更像是getter,尽管设置了一个类变量,但您不能这样做。第二条语句
返回printArea将永远不会执行。我想您希望
toString()
返回值
返回printpermiture+printparea
。不相关,但是为什么setter不接受参数并返回值呢?在我看来更像是getter,尽管第一个解决方案设置了类variable1+,但我不会创建一个数组来存储两个对象。似乎不必要,而且会导致开销。同样,如果OP采用这种方法
返回dimens
会失败,因为它是一个字符串数组,而不是一个
字符串。是的,我只是假设OP会将方法声明中的返回类型更改为String[]。好的,我明白了,但即使如此,toString的定义是它返回一个对象的字符串表示形式,而不是字符串数组或任何其他类型。@Aominè我同意你的看法,可能该方法最好称为toString Garray()或类似的方法。我猜OP需要为周长和面积使用单独的字符串是有原因的,使用数组可以提供这种灵活性。就像两种不同的方法一样。取决于OP需要。1+对于第一个解决方案,但我不会创建一个数组来存储两个对象。似乎不必要,而且会导致开销。同样,如果OP采用这种方法
返回dimens
会失败,因为它是一个字符串数组,而不是一个
字符串。是的,我只是假设OP会将方法声明中的返回类型更改为String[]。好的,我明白了,但即使如此,toString的定义是它返回一个对象的字符串表示形式,而不是字符串数组或任何其他类型。@Aominè我同意你的看法,可能该方法最好称为toString Garray()或类似的方法。我猜OP需要为周长和面积使用单独的字符串是有原因的,使用数组可以提供这种灵活性。就像两种不同的方法一样。取决于OP需求。1+的有效解决方案,但出于好奇,是否有使用StringBuilder而不是字符串的特定原因?通常,在循环中连接字符串时,您更喜欢使用
StringBuilder
而不是
String
。1+是一个有效的解决方案,但出于好奇,是否有使用StringBuilder而不是字符串的特定原因?通常,在concatena时,您更喜欢
StringBuilder
而不是
String