首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有人介意帮我排查代码故障,我正在尝试导入我创建的一个类,结果得到“cannot resolve error”

有没有人介意帮我排查代码故障,我正在尝试导入我创建的一个类,结果得到“cannot resolve error”
EN

Stack Overflow用户
提问于 2014-11-02 16:44:34
回答 3查看 43关注 0票数 0

java新手,需要一些帮助。我正在处理2个文件。一个类定义一个类及其所有方法,另一个类构造该类的一个实例。我的项目要求我们将类方法的输出写入到file.When中,我尝试将文件1导入到文件2中,但一直收到“无法解析”错误。

文件#1

代码语言:javascript
复制
public class ViolinGonzalezAP3 {
    //Create Violin class
        public int numberOfStrings = 4;
        public char[] stringNames = {'E', 'A', 'D', 'G'};
        public boolean isTuned = false;
        public boolean isPlaying = false;
        public int numberOfViolins = 0;
    class Violin{
        //Create methods for Violin class
        public Violin(){
            numberOfViolins++;
        }
        public void startPlaying() {
            isPlaying = true;
            System.out.println(" violin is now playing.");
        }
        public void stopPlaying() {
            isPlaying = false;
            System.out.println(" violin has stopped playing.");
        }
        public void tuneOn() {
            isTuned = true;
            System.out.println(" violin is now tuned.");
        }
        public void tuneOff() {
            isTuned = false;
            System.out.println(" violin is untuned.");
        } 
        int getNumberOfViolins(){
            return numberOfViolins;
        }
        int getNumberOfStrings(){
            return numberOfStrings;
        }
        char[] notes(){
            return stringNames;
        }
    }
}       

文件#2

代码语言:javascript
复制
import java.io.*;
import java.util.Arrays;

public class ViolinDriverGonzalezAP3 {
    public static void main(String[] args) throws Exception{
        //Declare file and class names
        java.io.File file = new java.io.File("Java violinOutput.txt");
        PrintWriter output = new PrintWriter(file);
        Violin[] violinAmount = new Violin[10];
        //Create 10 violin objects
        for (int i = 0; i < violinAmount.length; i++){
            violinAmount[i] = new Violin();
            System.out.println(Violin.getNumberOfViolins() + " Violin");
            output.println(Violin.getNumberOfViolins() + " object:");
            violinAmount[i].tuneOff();
            output.println("The violin is now tunning...");
            violinAmount[i].tuneOn();           
            output.println("The violin is now playing...");
            violinAmount[i].startPlaying();
            output.println("String numbers is " + Violin.getNumberOfStrings() + " with String names are " + Arrays.toString(Violin.notes()));
            output.println("The violin is now stopped");
            violinAmount[i].stopPlaying();
        }
        output.close();
   }
}
EN

回答 3

Stack Overflow用户

发布于 2014-11-02 17:12:46

为了创建内部类的实例,您必须首先创建一个外部类的实例。检查此代码。

代码语言:javascript
复制
import java.io.*;
import java.util.Arrays;
public class ViolinDriverGonzalezAP3 {

    public static void main(String[] args) throws Exception{
        //Declare file and class names
        java.io.File file = new java.io.File("Java violinOutput.txt");
        PrintWriter output = new PrintWriter(file);
        ViolinGonzalezAP3 outerClassObj = new ViolinGonzalezAP3();

        ViolinGonzalezAP3.Violin[] violinAmount = new ViolinGonzalezAP3.Violin[10];
        //Create 10 violin objects
        for (int i = 0; i < violinAmount.length; i++){
            violinAmount[i] = outerClassObj.new Violin();
            System.out.println(violinAmount[i].getNumberOfViolins() + " Violin");
            output.println(violinAmount[i].getNumberOfViolins() + " object:");
            violinAmount[i].tuneOff();
            output.println("The violin is now tunning...");
            violinAmount[i].tuneOn();           
            output.println("The violin is now playing...");
            violinAmount[i].startPlaying();
            output.println("String numbers is " + violinAmount[i].getNumberOfStrings() + " with String names are " + Arrays.toString(violinAmount[i].notes()));
            output.println("The violin is now stopped");
            violinAmount[i].stopPlaying();
        }
        output.close();
   }

}
票数 0
EN

Stack Overflow用户

发布于 2014-11-02 17:14:40

尝试修改第二个类:

代码语言:javascript
复制
import java.io.*;
import java.util.Arrays;

public class ViolinDriverGonzalezAP3 {
public static void main(String[] args) throws Exception{
    //Declare file and class names
    java.io.File file = new java.io.File("Java violinOutput.txt");
    PrintWriter output = new PrintWriter(file);
    ViolinGonzalezAP3 vg = new ViolinGonzalezAP3();
    ViolinGonzalezAP3.Violin[] violinAmount = new ViolinGonzalezAP3.Violin[10];
    //Create 10 violin objects
    for (int i = 0; i < violinAmount.length; i++){
        violinAmount[i] = vg.new Violin();
        System.out.println(violinAmount[i].getNumberOfViolins() + " Violin");
        output.println(violinAmount[i].getNumberOfViolins() + " object:");
        violinAmount[i].tuneOff();
        output.println("The violin is now tunning...");
        violinAmount[i].tuneOn();           
        output.println("The violin is now playing...");
        violinAmount[i].startPlaying();
        output.println("String numbers is " + violinAmount[i].getNumberOfStrings() + " with String names are " + Arrays.toString(violinAmount[i].notes()));
        output.println("The violin is now stopped");
        violinAmount[i].stopPlaying();
    }
    output.close();
   }
}//end method main
票数 0
EN

Stack Overflow用户

发布于 2014-11-02 17:17:34

代码为Violin类返回cannot resolve错误的原因是因为该类在ViolinGonzalezAP3中被定义为内部类。

虽然仍然可以在代码的其他部分实例化和引用内部类,但这样做应该有很好的理由。在您的特定情况下,我建议避免这样做,只需按如下方式公开小提琴类:

文件: Violin.java

代码语言:javascript
复制
class Violin{

    private static int numberOfViolins = 0;
    private static final int numberOfStrings = 4;
    private static final char[] stringNames = {'E', 'A', 'D', 'G'};
    private boolean isTuned = false;
    private boolean isPlaying = false;

    //Create methods for Violin class
    public Violin(){
        numberOfViolins++;
    }
    public void startPlaying() {
        isPlaying = true;
        System.out.println(" violin is now playing.");
    }
    public void stopPlaying() {
        isPlaying = false;
        System.out.println(" violin has stopped playing.");
    }
    public void tuneOn() {
        isTuned = true;
        System.out.println(" violin is now tuned.");
    }
    public void tuneOff() {
        isTuned = false;
        System.out.println(" violin is untuned.");
    } 
    public static int getNumberOfViolins(){
        return numberOfViolins;
    }
    public static int getNumberOfStrings(){
        return numberOfStrings;
    }
    public static char[] notes(){
        return stringNames;
    }
}

请详细查看这个类,因为您将在此处找到对原始代码的更多更改:

methods

  • numberOfStrings和modified

  • numberOfViolins参数被定义为静态,因为它们是常量,不会是静态的,从而保持创建的小提琴的全局数量(注意:有更好的方法来解决这个任务,即可以将保持实例数量的责任移到ViolinDriverGonzalezAP3上,但现在就可以了)。和private已经定义为静态的,以保持创建的小提琴的全局数量。
  • 方法getNumberOfViolinsgetNumberOfStringsnotes已定义为public static,因此可以通过Violin.<methodName>

将它们作为类方法进行访问

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26697536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档