簡體   English   中英

Java找不到符號錯誤-來自另一個類的方法

[英]Java cannot find symbol error - a method from another class

我正在嘗試通過以下方式從類MarkMaker訪問方法changeAll:

 import java.util.Scanner;

    class Question10e
    {
     public static void main(String[] args)
     {
      System.out.println();
      Scanner input = new Scanner(System.in);

      System.out.print("Enter mark 1: ");
      int newm1=input.nextInt();
      System.out.print("Enter mark 2: ");
      int newm2=input.nextInt();
      System.out.print("Enter mark 3: ");
      int newm3=input.nextInt();
      String linem=input.nextLine();
      System.out.print("Enter a master password: ");
      String masterpass = input.next();
      linem=input.nextLine();

      MarkMaker mm = new MarkMaker(masterpass);
      Mark masterMark1 = mm.makeMark(newm1);
      Mark masterMark2 = mm.makeMark(newm2);
      Mark masterMark3 = mm.makeMark(newm3);

      try{
      System.out.println("The new mark 1 is "+masterMark1.provisional(masterpass));
      System.out.println("The new mark 2 is "+masterMark2.provisional(masterpass));
      System.out.println("The new mark 3 is "+masterMark3.provisional(masterpass));
      System.out.println("The new master password is is "+masterMark1.returnPass());
      int avg = mm.average();
      System.out.println("The average is "+avg);

      changeAll(5.5, 3);

      }
      catch(IncorrectPasswordException e){}

     }

    }

這是MarkMaker類:

import java.util.*;

  class MarkMaker{
private String masterPass = "";
private ArrayList<Mark> masterArr = new ArrayList<Mark>();

public MarkMaker(String masterPass)
{
    this.masterPass = masterPass;
}

public Mark makeMark(int m)
{
    Mark newMarkObj = new Mark(m,masterPass);
    masterArr.add(newMarkObj);
    return newMarkObj;
}

public ArrayList<Mark> returnMasterArr()
{
    return masterArr;
}


public int average() throws IncorrectPasswordException
{
    int n = 0;
    for(int i=0; i<masterArr.size(); i++)
    {
        n = n + masterArr.get(i).provisional(masterPass); 
    }

    int avg = n/masterArr.size();
    return avg;
}

public void changeAll(double d, int x) throws IncorrectPasswordException
{
    for(int i=0; i<masterArr.size(); i++)
    {
        double currentMark = masterArr.get(i).provisional(masterPass); 
        System.out.println("Current mark is: "+currentMark);
        currentMark = currentMark*d; 
        System.out.println("Current mark is: "+currentMark);
        currentMark = Math.ceil(currentMark); 
        System.out.println("Current mark is: "+currentMark);
    }
} }

這是Mark類:

class Mark
  {
private int value;
private String password;
boolean released;

public Mark(int value, String password) 
{
    this.value = value;
    this.password = password;
    released = false;
}

public void release(String p) throws IncorrectPasswordException
{
    if(p.equals(password))
    {
    if(released==false)
        released = true;
    }
    else throw new IncorrectPasswordException(p);
}

public int value() throws UnReleasedException
{
    if(released==true)
        return value;
    else
        throw new UnReleasedException();
}

public int provisional(String p) throws IncorrectPasswordException
{
    if(p.equals(password))
    return value;
    else
    throw new IncorrectPasswordException(p);
}

public void change(String p, int arg) throws IncorrectPasswordException
{
    if(p.equals(password))
    value = arg;
    else
    throw new IncorrectPasswordException(p);
}

public String returnPass()
{
    return password;
}

public boolean isReleased()
{
    return released;
}

public boolean equals(Mark m2) throws UnReleasedException
{
    if(this.isReleased() && m2.isReleased())
    { //it throws an error, that's why i'm using the Unreleased Exception
        if(this.value()==m2.value())
            return true;
    }

     throw new UnReleasedException();
} }

問題是我總是收到“找不到符號錯誤-方法changeAll(double,int),位置類Question10e”

Question10e沒有此方法。 也許您打算在確實喜歡的類的實例上調用此方法。

mm.changeAll(5.5, 3);

changeAll是屬於MarkMaker類的方法,而不是您嘗試在其中調用該方法的當前Question10e類:

mm.changeAll(5.5, 3);

您需要通過MarkMarker對象調用changeAll() 它在您的Question10e類中不存在。 因此,您可以通過以下方式執行此操作:

mm.changeAll(5.5, 3)

僅僅因為changeAll()public並不意味着您可以從任何地方調用它。 它只是意味着MarkMarker對象可以從任何地方調用它。

你需要

 mm.changeAll(5.5, 3);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM