Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当程序中的循环未按预期工作并被卡住时_Java_Oop_Object_While Loop - Fatal编程技术网

Java 当程序中的循环未按预期工作并被卡住时

Java 当程序中的循环未按预期工作并被卡住时,java,oop,object,while-loop,Java,Oop,Object,While Loop,我是个初学者,希望能给我一些建议。我正在编写一个程序,让机场工作人员输入飞机信息,然后机场用户可以打印出这些信息。程序应不断询问用户应选择哪个选项,直到用户键入“x”退出程序 查看startAirplanePanel()方法下的while循环 以下是我的UserInterface类: import java.util.HashMap; import java.util.Scanner; import java.util.ArrayList; public class UserInterface

我是个初学者,希望能给我一些建议。我正在编写一个程序,让机场工作人员输入飞机信息,然后机场用户可以打印出这些信息。程序应不断询问用户应选择哪个选项,直到用户键入“x”退出程序

查看startAirplanePanel()方法下的while循环

以下是我的UserInterface类:

import java.util.HashMap;
import java.util.Scanner;
import java.util.ArrayList;

public class UserInterface {
    private Flights fly;
    private Scanner reader = new Scanner(System.in);  

    public UserInterface(){
        this.fly = new Flights();
        this.reader = reader;  
    }   

    public void startAirplanePanel(){        

        System.out.println("Airport panel");
        System.out.println("---------------");
        System.out.println();
        System.out.println();  

        while(true){
        System.out.println("Choose operation: ");
        System.out.println("[1] Add airplane");
        System.out.println("[2] Add flight");
        System.out.println("[x] Exit");

        String input = reader.nextLine();
                if(input.equals("x")){
            break;
        }

        if(Integer.parseInt(input) == 1){
            addPlane();            

        } if(Integer.parseInt(input) == 2){
            addFlight();        
        }
    }        

        System.out.println("Flight service ");
            System.out.println("--------------");
            System.out.println();
            System.out.println();

         while(true){

            System.out.println("Choose operation: ");
            System.out.println("[1] Print planes");
            System.out.println("[2] Print flights");
            System.out.println("[3] Print plane info");
            System.out.println("[x] Print Quit");

            if(reader.equals("x")){
                break;
            }
            if(Integer.parseInt(reader.nextLine()) == 1){
                printPlane();

            }
            if(Integer.parseInt(reader.nextLine()) == 2){
                printFlight();
            }
            if(Integer.parseInt(reader.nextLine()) == 3){
                printPlaneInfo();
            }


        }

}

    public void addPlane(){
        System.out.println("Give plane ID: ");
        String id = reader.nextLine();
        System.out.println("Give plane capacity: ");
        int capacity = Integer.parseInt(reader.nextLine());

        fly.planeMap(id,capacity);      
    }

    public void addFlight(){
        System.out.println("Give plane ID: ");
        String id = reader.nextLine();
        System.out.println("Give departure airport code: ");
        String departure = reader.nextLine();
        System.out.println("Give destination airport code: ");
        String destination = reader.nextLine();     

        fly.flightMap(id,departure,destination);
    }

    public void printPlane(){

        for(int i = 0; i < fly.planeList().size(); i++){
            System.out.println(fly.planeList().get(i));
        }
    }

    public void printFlight(){
        for(int i = 0; i < fly.flightList().size(); i++){
            System.out.println(fly.flightList().get(i));
        }       
    }

    public void printPlaneInfo(){
        System.out.print("Give plane ID: ");
        String id = reader.nextLine();

        System.out.println(id + " (" + fly.planeInfo(id) + ")");
    }

}
第二个While循环应该继续要求用户选择一个操作,例如,在输入1并且系统打印“GA-HAS(33ppl)”,它应该再次要求用户选择操作:[1]打印平面…[3]打印退出]。但是While循环就停在那里,我找不到原因


请告知。谢谢!

您的while循环尚未停止,它正在等待输入

在每个if条件下调用
nextLine
,这意味着程序正在等待更多输入。在获得输入之前,程序不会继续


第一个while循环正确。在循环顶部接受一个输入,然后根据需要进行比较。

将第一个while循环的右大括号放在第二个while循环的右大括号下。您有reader.equals(“x”)由于扫描程序不能等于字符串,因此其计算结果应始终为false。

import java.util.HashMap;

import java.util.ArrayList;

public class Flights {

    public HashMap<String,Integer> plane = new HashMap<String,Integer>();
    public HashMap<String,String> flight = new HashMap<String,String>();

    public Flights(){

        this.plane = plane;
        this.flight = flight;

    }
    public void planeMap(String id, Integer capacity){
        plane.put(id, capacity);
    }

    public void flightMap(String id, String departure, String destination){
        String flight1 = departure + "-" + destination;
        flight.put(id, flight1);
    }

    public ArrayList planeList(){
        ArrayList<String> keylist = new ArrayList<String>(plane.keySet());
        ArrayList<Integer> valuelist =  new ArrayList<Integer>(plane.values());
        ArrayList<String> newlist = new ArrayList<String>();

        for(int i = 0 ; i < keylist.size() ; i++){
            newlist.add(keylist.get(i) + " (" + valuelist.get(i) + "ppl)");
        }

        return newlist;
    }

    public ArrayList flightList(){
        ArrayList<String> keylist = new ArrayList<String>(flight.keySet());
        ArrayList<String> valuelist =  new ArrayList<String>(flight.values());
        ArrayList<String> newlist = new ArrayList<String>();

        for(int i = 0; i < keylist.size(); i++){
            newlist.add(keylist.get(i) + " (" + plane.containsKey(keylist.get(i)) + "ppl) " + "(" + valuelist.get(i) + ")");
        }        

        return newlist;
    }

    public int planeInfo(String id){

        if(plane.containsKey(id)){
        return plane.get(id);
    }
        return 0;
}

}
Airport panel
---------------


Choose operation: 
[1] Add airplane
[2] Add flight
[x] Exit
1
Give plane ID: 
GA-HAS
Give plane capacity: 
33
Choose operation: 
[1] Add airplane
[2] Add flight
[x] Exit
x
Flight service 
--------------


Choose operation: 
[1] Print planes
[2] Print flights
[3] Print plane info
[x] Print Quit
1
GA-HAS (33ppl)