netbeans 在Java中,如何使用主类中子类的方法?

rur96b6h  于 2022-11-10  发布在  Java
关注(0)|答案(2)|浏览(178)

我正在做一个作业,我不知道该做什么。我有三个不同的Java类。我试图使用一个类中的方法来做另一个类中的事情。我正在做一个非常原始的播放列表程序。我必须检查播放列表是否已满,如果不是,我必须询问标题和艺术家。然后我必须使用标题和艺术家作为参数调用我的方法。我想知道是否有人能给我指出正确的方向,我必须做什么来调用方法?我仍然不完全理解循环,但我知道我必须使用一个for循环来做到这一点。谢谢你的时间。
下面是我的代码:
主要类别

import java.util.Scanner;
public class Main {

public static void main(String[] args) {
   PlayList p = new PlayList (5);
   Scanner sc = new Scanner(System.in);
   String command;
   String title;
   String artist;

  System.out.println("Enter a to add, r to remove, d to display,or q to 
  quit:");
  command = sc.nextLine();
  while (!command.equals("q")) {
  // Interpret command
  if (command.equals("a")) {
   //add song
 for (int i = 0; i <= PlayList.isFull(title, artist);i++) {
     if(songs[i])== null {
     songs[i] = filled;
  }

  }

  } else if (command.equals("r")) {
  // Remove a song
  System.out.print("Title: ");
  title = sc.nextLine();
  p.remove(title);
  } else if (command.equals("d")) {
  // Fill this in
  }
  // Get the next command
  System.out.println("Enter a to add, r to remove, d to display, or q to 
  quit:");
  command = sc.nextLine();
   }
  System.out.println("Program Ended");

   }
   }

播放列表类

public class PlayList {
private Song [] songs;
private int filled;

public PlayList (int size){
    songs = new Song[size];
}
public boolean isFull() {
    return (filled >= songs.length);
}
public void add(String t, String a) {
    for (int i = 0; i < songs.length; i++){
        if (songs[i] == null){
            songs[i] = new Song(t,a);
            filled++;
        }
    }      
}
public void display() {
    for (int i = 0; i < songs.length; i++){
        if (songs[i] != null) {
            System.out.println(songs[i]);
        }
    }
}
public void remove(String t) {
    //return t?
    for (int i = 0; i < songs.length; i--){
        if (songs[i] == null){
            songs[i] = null;
            break;
}
}
}
}

歌曲类

public class Song {
String title;
String artist; 

public Song (String t, String a) {
title = t;
artist = a; 
}
public String toString() {
return "Title: " + title + " " + "Artist: " + artist;

}

}
lmvvr0a8

lmvvr0a81#

首先你使用的isFull类的PlayList函数是错误的。

for (int i = 0; i <= PlayList.isFull(title, artist);i++)

1.isFull是一个无参数的函数,您在使用它时传递了2个参数。
1.isFull函数返回一个布尔值(即true/false),但您将其与一个 int 进行比较,这没有任何意义。
1.isFull不是一个 static 函数。因此,不能直接将其与类名一起使用。

  • 您需要将函数isFull声明为静态。
public static boolean isFull()
  • 或者,您需要在类Main中创建类PlayList的对象,然后使用该java对象调用java函数。
    此外,您的函数remove未执行任何任务
if (songs[i] == null){
        songs[i] = null;
}

它检查songs[i]是否已经为空,然后将其设置回空,这没有任何意义。
您应该递增
i
(即i++),而不是递减(即i--)

for (int i = 0; i < songs.length; i--)
pod7payv

pod7payv2#

如果你想从另一个类调用方法,那么这个方法必须是static方法。然后你可以用Class nameMethod name来调用它。举个例子;

public class main(){
    A a = new A();
    a.x();
}
public class A{
    public static void x(){};
}

你用两个参数调用了isFull方法,但是你的PlayList类没有isFull方法的任何参数。这是一个error。我用ArrayListPlayList类重写了你的赋值类集。按照下面的代码。希望你能理解它的OOP概念(按照这个教程。https://www.javatpoint.com/java-oops-concepts)。
主要类别

import java.util.Scanner;
public class Main {

    public static void main(String[] args) {
        PlayList p = new PlayList (5);
        Scanner sc = new Scanner(System.in);
        String command;
        String title;
        String artist;

        System.out.println("Enter a to add, r to remove, d to display,or q to quit:");
        command = sc.nextLine();
        while (!command.equals("q")) {
            // Interpret command
            if (command.equals("a")) {
                //add song
                System.out.println("Enter Title:");
                title = sc.nextLine();
                System.out.println("Enter Artist:");
                artist = sc.nextLine();
                if(!p.isFull()) {
                    p.add(title, artist);
                    System.out.println("Added Success!");
                }
                else
                    System.out.println("Sorry,Playlist is full");

            } else if (command.equals("r")) {
                // Remove a song
                System.out.print("Title: ");
                title = sc.nextLine();
                p.remove(title);
            } else if (command.equals("d")) {
                // Fill this in
                p.display();
            }
            // Get the next command
            System.out.println("Enter a to add, r to remove, d to display, or q to quit:");
            command = sc.nextLine();
        }
        System.out.println("Program Ended");

    }
}

PlayList类别

import java.util.ArrayList;
import java.util.List;

public class PlayList {
    private static List<Song> songs;
    private static int filled;
    private  static int size = 0;

    public PlayList (int s){
        songs = new ArrayList<>();
        size = s;
    }
    public static boolean isFull() {
        return (filled == size);
    }
    public static void add(String t, String a) {
        songs.add(new Song(t,a));
                filled++;
    }
    public void display() {
        for (int i = 0; i < songs.size(); i++){
            if (songs.get(i) != null) {
                System.out.println(songs.get(i));
            }
        }
    }
    public void remove(String t) {
        //return t?
        for (int i = 0; i < songs.size(); i++){
            if (songs.get(i).title == t){
                songs.remove(i);
                break;
            }
        }
    }
    public static int getSize(){
        return songs.size();
    }
}

Song类与您编写类相同

相关问题