在java中输入多个内容到一个数组中

时间:2014-03-20 16:32:22

标签: java arrays

我对java很新,但有一个我需要完成的项目,并且卡在了某个部分。

我想允许用户输入路线,包括开始目的地,结束目的地和停靠点数。我已经能够做到这一点,但我希望用户能够再次添加相同的东西到同一个数组。不删除现有路线

这是我到目前为止的代码

import java.util.Scanner;
import java.util.Arrays;


public class main {
    public static void main(String[] args){
        menu();
    }

    public static void menu(){
        Scanner scanner = new Scanner(System.in);

        System.out.println("enter 1 to input a new route");
        int option = scanner.nextInt();
        if(option==1){
            inputRoute();
        }

    }

    public static void inputRoute(){
        Scanner scanner = new Scanner(System.in);


        System.out.println("Please Enter Starting Destination");
        String startDest = scanner.next();

        System.out.println("Please Enter End Destination");
        String endDest = scanner.next();

        System.out.println("Please Enter Number of stops");
        int numberOfStops = scanner.nextInt();
        String[] stops = new String[numberOfStops];

        for(int i = 1; i<=numberOfStops; i++){

            System.out.println("Enter Stop" + i);
            stops[i-1] = scanner.next();

        }
        System.out.println(Arrays.toString(stops));
        menu();

    }
}

然而,当这个运行时,如果我返回并进入另一个路线,它将只删除现有路线。 有没有办法将下一个路由附加到该数组的末尾或以任何方式执行此操作?

谢谢

6 个答案:

答案 0 :(得分:1)

就像暗恋说的那样。使用ArrayList<String>对象,而不是使用正常的字符串数组。甚至是ArrayList<String[]>并将每条路线存放在那里。

答案 1 :(得分:1)

首先,您需要将stops数组声明为实例变量,否则每当调用inputRoute()方法时,您将始终创建一个新数组。

然后保留旧条目我可以想到两种方式 - &gt;
- &GT;修改循环如下...

for(int i = 1; i<=numberOfStops; i++){
        System.out.println("Enter Stop" + i);
        if(stops!=null)    //without the if condition it will also append null in the start
            stops[i-1]=stops[i-1]+", "+ scanner.next();   // you can you any separator 
        else
            stops[i-1]=scanner.next();
}

- &GT;或者您可以使用ArrayList或任何其他提供自动增量的集合

答案 2 :(得分:0)

尝试将停止声明为全局变量。 (在课程线下面)

我还建议使用ArrayList,在那些行上列出一些东西

答案 3 :(得分:0)

你不能为此使用数组(不经常重新分配它们),因为数组一旦创建就会固定大小。

尽管使用ArrayList,您可以根据需要添加任意数量的项目。

答案 4 :(得分:0)

简单(稍微错误)的解决方案是使您的数组成为在任何方法之外定义的静态数组。这将使你前进(虽然你将不得不使阵列大。

其他建议:

  1. 使用您的主要课程 - 避免混淆(如果您,甚至更多) 不要把它叫做主!)
  2. 让你的public static void main方法做 这个:新的Main()
  3. 然后摆脱所有其他的静电。
  4. 使用集合而不是数组。
  5. 而不是将每个条目分别添加到数组中(这将使你的一切更难),创建一个包含3个字段(开始,结束,停止)的第二个类,每次输入另一个记录时,“new”一个实例第二个类,将三个内容放入新实例中,并将该实例放在您的集合中。
  6. 在这一刻看起来似乎是武断和不必要的,但如果你有任何后续工作要做这个课程,这些事情会让你的生活更轻松。如果有任何看似令人困惑或您想了解原因,请随时在评论中提问。

答案 5 :(得分:0)

我认为这会对你有所帮助。

主档。

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


public class Main {
    public static void main(String[] args){
        menu();
    }

    public static void menu(){
        List<Route> routeList = new ArrayList<Route>();
        Scanner scanner = new Scanner(System.in);

        System.out.println("enter 1 to input a new route");
        int option = scanner.nextInt();
        if(option==1){
            routeList.add(inputRoute());
        }

        System.out.println("Complete list of routes is "+routeList);

    }

    public static Route inputRoute(){
        Route route = new Route();
        Scanner scanner = new Scanner(System.in);

        System.out.println("Please enter the name of the route");
        String name = scanner.next();
        route.setName(name);

        System.out.println("Please Enter Starting Destination");
        String startDest = scanner.next();
        route.setStartLocation(startDest);

        System.out.println("Please Enter End Destination");
        String endDest = scanner.next();
        route.setEndLocation(endDest);

        System.out.println("Please Enter Number of stops");
        int numberOfStops = scanner.nextInt();

        if(numberOfStops > 0){
            route.setStopList(new ArrayList<String>());
        for(int i = 1; i<=numberOfStops; i++){

            System.out.println("Enter Stop" + i);
            route.getStopList().add(scanner.next());
            }

        System.out.println("current entered route is "+route);
        menu();
        }
        return route;
    }
}

路线档案:

import java.util.List;
public class Route {
    String name ;
    String startLocation;
    String endLocation;
    List<String> stopList;

    public Route() {
    }

    public Route(String name, String startLocation, String endLocation, List<String> stopList) {
        this.name = name;
        this.startLocation = startLocation;
        this.endLocation = endLocation;
        this.stopList = stopList;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getStartLocation() {
        return startLocation;
    }

    public void setStartLocation(String startLocation) {
        this.startLocation = startLocation;
    }

    public String getEndLocation() {
        return endLocation;
    }

    public void setEndLocation(String endLocation) {
        this.endLocation = endLocation;
    }

    public List<String> getStopList() {
        return stopList;
    }

    public void setStopList(List<String> stopList) {
        this.stopList = stopList;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Route route = (Route) o;

        if (endLocation != null ? !endLocation.equals(route.endLocation) : route.endLocation != null) return false;
        if (name != null ? !name.equals(route.name) : route.name != null) return false;
        if (startLocation != null ? !startLocation.equals(route.startLocation) : route.startLocation != null)
            return false;
        if (stopList != null ? !stopList.equals(route.stopList) : route.stopList != null) return false;

        return true;
    }

    @Override
    public int hashCode() {
        int result = name != null ? name.hashCode() : 0;
        result = 31 * result + (startLocation != null ? startLocation.hashCode() : 0);
        result = 31 * result + (endLocation != null ? endLocation.hashCode() : 0);
        result = 31 * result + (stopList != null ? stopList.hashCode() : 0);
        return result;
    }

    @Override
    public String toString() {
        return "Route{" +
                "name='" + name + '\'' +
                ", startLocation='" + startLocation + '\'' +
                ", endLocation='" + endLocation + '\'' +
                ", stopList=" + stopList +
                '}';
    }
}