有人能告诉我为什么在第一次方法调用后这些方法没有运行吗JAVA

有人能告诉我为什么在第一次方法调用后这些方法没有运行吗JAVA,java,sockets,arraylist,methods,client-server,Java,Sockets,Arraylist,Methods,Client Server,所以基本上我有一个简单的echo服务器客户端。我想做的是运行服务器,然后运行客户机,一旦客户机已经运行,它应该运行其中的方法。然而,只有第一个方法searchForSkill运行,在这之后没有其他事情发生,任何人都可以解释为什么会发生这种情况,或者如何确保下一个调用的方法实际运行?我有一个开发人员数据库类,它使用构造函数创建服务器类中的对象。非常感谢您的帮助 服务器类: import java.io.PrintWriter; import java.net.ServerSocket;

所以基本上我有一个简单的echo服务器客户端。我想做的是运行服务器,然后运行客户机,一旦客户机已经运行,它应该运行其中的方法。然而,只有第一个方法searchForSkill运行,在这之后没有其他事情发生,任何人都可以解释为什么会发生这种情况,或者如何确保下一个调用的方法实际运行?我有一个开发人员数据库类,它使用构造函数创建服务器类中的对象。非常感谢您的帮助

服务器类:

      import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;



public class Server {



    static List<DeveloperDatabase> list = new ArrayList<DeveloperDatabase>(){

        {
            add(new DeveloperDatabase(1,"David Ferguson", "Java", true));
            add(new DeveloperDatabase(2,"Grant Thompson", "Java", true));
            add(new DeveloperDatabase(3,"Craig Jackson", "C++", true));
            add(new DeveloperDatabase(4,"Kevin James","C++", true));
            add(new DeveloperDatabase(5,"Greg Troupe", "Python", true));
            add(new DeveloperDatabase(6,"James Smith", "Python", true));
            add(new DeveloperDatabase(7,"Jamie Richie", "PHP", true));
            add(new DeveloperDatabase(8,"Rory McGrattan", "PHP", false));
        }

    };
    public static String printJava(){
        String message="";
        for (int i=0;i<2;i++){
            message +=list.get(i).toString();
            message+=" \n";

        }
        return message;
    }
    public static String printC(){
        String message="";
        for (int i=2;i<4;i++){
            message +=list.get(i).toString();
            message+=" \n";

        }
        return message;
    }
    public static String printPy(){
        String message="";
        for (int i=4;i<6;i++){
            message +=list.get(i).toString();
            message+=" \n";

        }
        return message;
    }
    public static String printPHP(){
        String message="";
        for (int i=6;i<8;i++){
            message +=list.get(i).toString();
            message+=" \n";

        }
        return message;
    }

    // Main
    public static void main(String[] args) {


        ServerSocket listenSocket;
        Socket s;

        PrintWriter toClient = null;
        Scanner fromClient = null;

        int port;                       // holds port server will listen on
        String userInput;               // holds a line typed by the user

        System.out.print("Server - port to listen on: ");
        //port = stdIn.nextInt();       // get port number from user
        port = 4444;                    // get port number from user
        System.out.println(port);


        try {
            listenSocket = new ServerSocket(port);
            System.out.println("Waiting for client...");
            s = listenSocket.accept();

            toClient = new PrintWriter(s.getOutputStream(), true);
            fromClient = new Scanner(s.getInputStream());

            int inputLine;
            do {
                inputLine = fromClient.nextInt();


                switch (inputLine) {
                    case 1: // get skills
                    {
                        System.out.println("GET skill");
                        fromClient.nextLine();
                        String quoteNum = fromClient.nextLine();//receive from client
                        if (quoteNum.equalsIgnoreCase("Java")) {
                            toClient.println(printJava());
                        } else if (quoteNum.equalsIgnoreCase("C++")) {
                            toClient.println(printC());
                        } else if (quoteNum.equalsIgnoreCase("Python")) {
                            toClient.println(printPy());
                        } else if (quoteNum.equalsIgnoreCase("PHP")) {
                            toClient.println(printPHP());
                        }
                        else {
                            toClient.println("No developer with those skills found");
                        }
                        // toClient.println(list.equals("Java"));//number -1 for array (0) to client print
                        System.out.println("Pushed Developer number: " + quoteNum + " to client at " + s.getInetAddress());
                        //toClient.println(quotes[quoteNum]); // return quote          //if "java' { get(0)   get(1)
                        break;
                    }
                    case 2: // add quote
                    {
                        System.out.println("ADD Developer to System");
                        fromClient.nextLine();   // flush newline
                        String quote = fromClient.next();
                        fromClient.nextLine();
                        String quote1 = fromClient.next();
                        fromClient.nextLine();
                        boolean quote2 = fromClient.nextBoolean();
                        toClient.println("The\t*************Developer has been Added to the Developer Database********");
                        list.add(new DeveloperDatabase(9, quote, quote1, quote2));
                        toClient.println(list.get(8).toString());
                        //addDeveloper(quote,quote1,quote2);
                        System.out.println(list.get(8));
                        //System.out.println("Received quote from client:" + quote);
                        quote = quote + "\n\n";
                        //list.add((quote);
                        System.out.println("Added Developer: " + quote);
                        break;
                    }
                    case 3: // Check if Developer is available
                    {
                        System.out.println("Check if developer is Available\n");
                        fromClient.nextLine();
                        String quoteNum = fromClient.nextLine();
                        System.out.println("Checking availability for: " + quoteNum);
                        if (quoteNum.equalsIgnoreCase("Rory McGrattan")) {
                            toClient.println("The Developer is not available for hire");
                        } else {
                            toClient.println("The Developer is available for hire");
                        }break;
                    }case 4: {
                        System.out.println("Hire A Developer");
                        String quoteNum =fromClient.next();
                        System.out.println("Client wants to hire: "+quoteNum);
                        String message = quoteNum;
                        for(int i=0;i<list.size();i++){
                            if (quoteNum.equalsIgnoreCase(list.get(i).getDeveloperName())){
                                list.get(i).hireDeveloper();
                            }//if
                        }//if
                        //System.out.println(message);
                        toClient.println("******* You have Hired: "+ message+" ********");
                        break;
                    }
                    case 5: {// Print all Developers
                        String message="";
                        for (int i=0;i<8;i++){
                            message +=list.get(i).toString();
                            message+=" \n";
                        }
                        toClient.println(message);
                    }
                    default:
                        break;

                }

            } while (fromClient.hasNextLine());

            // Close all streams
            System.out.println("Closing Server...");
            toClient.close();
            fromClient.close();
            s.close();
        } catch (Exception e) {
            System.out.println("Exception: " + e);
            System.exit(1);
        }
    } // run


} // Server
开发人员数据库类:

/**
 * Created by ${Grant} on ${28/09/2017}
 * COMMENTS ABOUT PROGRAM HERE
 */
public class DeveloperDatabase {
    private  int id;
    private  String developerName;
    private  String codingLanguage;
    private  boolean freeForHire;

    public  DeveloperDatabase(){

    }

    public  DeveloperDatabase(int id,String name,String codeSkills,boolean hire){
        this.id = id;
        this.developerName = name;
        this.codingLanguage=codeSkills;
        this.freeForHire=hire;
    }


    public String toString() {
        String message = "\tName: " +developerName;
        message += "\n" + "\tCoding Language:  "+ codingLanguage+"\n";

        if (freeForHire== true) {
            message += "\tThe developer is Available! for Hire!\n";
        } else {
            message += "\tThe developer is not Available for Hire!\n";
        }

        return message;
    }//toString


    public boolean getFreeForHire() {

        if (freeForHire==true){
            System.out.println("The Developer is free to hire!");
        }else{
            System.out.println("The Developer is not free to hire!");
        }
        return freeForHire;

    }

    public  String getCodingLanguage() {
        return codingLanguage;
    }

    public void hireDeveloper(){
        if (freeForHire==true)
            freeForHire = false;
        System.out.println(developerName +" is Hired!");
    }

    public String getDeveloperName() {
        return developerName;
    }

    public static void main(String[] args) {

    }//main
}//class   

你收到一个响应,阻止你退出<代码>,Loo.< /P>请考虑修改你在这个问题中发布的代码示例。目前,它的格式和范围使我们很难帮助您;这里有一个简单的例子让你开始。@FedericoklezCulloca-你觉得有什么特殊的类需要重新格式化吗?我的意思是,基本上是服务器在运行,然后客户端在运行,然后,客户端调用searchForSkills方法,该方法向服务器发送一个1,服务器输入switch语句并运行该案例-将信息返回给客户端-客户端再次在searchForSkills方法@FedericoklezCulloca中接收该信息-我相信问题可能出在该行上-而(!(reply=fromServer.nextLine()).isEmpty(){//System.out.println(reply1);System.out.println(reply);///print reply to screen}一旦它到达searchForSkills中的这一行,我不相信它能够离开,这意味着它无法继续下一个方法谢谢你的回答Frederik,我已经做了你说的,但是,一旦我做了,它就卡住了行-System.out.println(“在开发人员数据库中搜索技能:+Skill+”);-在searchForSkill方法中-有什么想法吗?thanksAny ideas Frederik?@GrantGroup加上“it Get Stick”,你的意思是执行实际上停止了,还是只是在条件不正确的情况下新的(调整的)?调试是你的朋友;)它在开发者数据库中打印Skill:PHP搜索行,然后完全跳过searchForSkills方法中的while循环OK,因此问题仍然处于while状态,只是现在它不会执行,而不会退出。大声解释你正在看的逻辑,看看你的硬币是否掉了:)

/**
 * Created by ${Grant} on ${28/09/2017}
 * COMMENTS ABOUT PROGRAM HERE
 */
public class DeveloperDatabase {
    private  int id;
    private  String developerName;
    private  String codingLanguage;
    private  boolean freeForHire;

    public  DeveloperDatabase(){

    }

    public  DeveloperDatabase(int id,String name,String codeSkills,boolean hire){
        this.id = id;
        this.developerName = name;
        this.codingLanguage=codeSkills;
        this.freeForHire=hire;
    }


    public String toString() {
        String message = "\tName: " +developerName;
        message += "\n" + "\tCoding Language:  "+ codingLanguage+"\n";

        if (freeForHire== true) {
            message += "\tThe developer is Available! for Hire!\n";
        } else {
            message += "\tThe developer is not Available for Hire!\n";
        }

        return message;
    }//toString


    public boolean getFreeForHire() {

        if (freeForHire==true){
            System.out.println("The Developer is free to hire!");
        }else{
            System.out.println("The Developer is not free to hire!");
        }
        return freeForHire;

    }

    public  String getCodingLanguage() {
        return codingLanguage;
    }

    public void hireDeveloper(){
        if (freeForHire==true)
            freeForHire = false;
        System.out.println(developerName +" is Hired!");
    }

    public String getDeveloperName() {
        return developerName;
    }

    public static void main(String[] args) {

    }//main
}//class   
while (!(reply = fromServer.nextLine()).isEmpty()) {
    // System.out.println(reply1);
    System.out.println(reply);// print reply to screen
}