【问题标题】:"java" i can't run the code with that static method but i have to make it static [duplicate]“java”我无法使用该静态方法运行代码,但我必须将其设为静态 [重复]
【发布时间】:2017-10-23 20:18:02
【问题描述】:

我是学生,老师让我们做一个静态方法SOMME来统计向量总和,(代码里叫SOMME)他说应该是static,我没有'不知道问题出在哪里,我几乎尝试了所有可能的方法来解决这个问题,但没有解决方案。

这里是代码:

import java.util.*;
public class Vecteur {// 3D

    public double x;
    public double y;
    public double z;

    public Vecteur (double x,double y,double z ) 
    {

        this.x=x;
        this.y=y;
        this.z=z;
    }


    public void affichage ()
    {  
        System.out.println("("+x+","+y+","+z);
    }

    public double norme() 
    {   
        return Math.sqrt(x*x+y*y+z*z);
    }

    public static Vecteur somme(Vecteur v) // he told us to make it static nom matter what 
    {
         Vecteur u=new Vecteur(0.0,0.0,0.0);

         u.x=x+v.x;
         u.y=y+v.y;
         u.z=z+v.z;

         return u;
    }

    public double produit(Vecteur v)
    {
        return x*v.x+y*v.y+z*v.z; 
    }
}

【问题讨论】:

  • 欢迎来到 Stack Overflow!请查看我们的SO Question Checklist 以帮助您提出一个好问题,从而得到一个好的答案。
  • “我尝试了几乎所有可能的方法来解决这个问题,但没有解决方案”几乎所有可能的方法是什么?
  • 另外,你遇到了什么错误?
  • 什么问题?请尽量具体。
  • 我收到一个错误,说非静态变量 .. in x 和 y

标签: java static


【解决方案1】:

如果你想要它是静态的,你必须这样做:

public static Vecteur somme(Vecteur v1, Vecteur v2) 
{
     Vecteur u = new Vecteur(v1.x + v2.x, v1.y + v2.y, v1.z + v2.z);
     return u;
}

仅使用一个参数并能够使用您自己的值的唯一方法是使用这样的非静态方法:

public Vecteur somme(Vecteur other)
{
    Vecteur u = new Vecteur(this.x + other.x, this.y + other.y, this.z + other.z);
    return u;
}

我建议您查看this。 我在下面的课程中添加了两者:

公共静态类 Vecteur {// 3D

public double x;
public double y;
public double z;

public Vecteur (double x,double y,double z ) 
{

    this.x=x;
    this.y=y;
    this.z=z;
}


public void affichage ()
{  
    System.out.println("("+x+","+y+","+z);
}

public double norme() 
{   
    return Math.sqrt(x*x+y*y+z*z);
}

public static Vecteur somme(Vecteur v1, Vecteur v2) // he told us to make it static nom matter what 
{
     Vecteur u = new Vecteur(v1.x + v2.x, v1.y + v2.y, v1.z + v2.z);
     return u;
}

public Vecteur somme(Vecteur other)
{
    Vecteur u = new Vecteur(this.x + other.x, this.y + other.y, this.z + other.z);
    return u;
}

public double produit(Vecteur v)
{
    return x*v.x+y*v.y+z*v.z; 
}

}

【讨论】:

【解决方案2】:

为什么代码不起作用

您正在尝试从静态方法访问实例变量,但这是行不通的。

如何解决这个问题

有两种方法可以做到这一点:

  • 将两个vertor作为方法的参数,并从参数中获取所有值
  • 使方法成为非静态方法以允许它访问实例方法

【讨论】:

    猜你喜欢
    • 2014-11-19
    • 1970-01-01
    • 2012-06-17
    • 2015-05-17
    • 1970-01-01
    • 2014-05-24
    • 2014-06-08
    相关资源
    最近更新 更多