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