用扫描器读取Java中输入的许多字符串



我有一个项目,涉及我创建一个程序,读取用户输入,然后程序告诉他们他们在哪个区域,但我似乎不知道如何添加多个字符串。

import java.util.*;
public class hello {
  public static void main (String args[]){
    Scanner input = new Scanner (System.in);
    String answer = input.nextLine();
    // I would like more stations to be added but I don't no how
    if ("Mile End".equals(answer)) { 
      System.out.println( input +" is in Zone 2");
    } else {
      System.out.println("That is not a Station, please try again");
    }
  }
}

看起来你想要一个循环。其中一个选项是,当用户进入一个特殊的"区域"时停止(如下面的quit)。

String answer = input.nextLine();
while (!answer.equalsIgnoreCase("quit")) {
    // I would like more stations to be added but I don't no how
    if ("Mile End".equals(answer)) { 
        System.out.println( input +" is in Zone 2");
    } else {
        System.out.println("That is not a Station, please try again. "
                + "Quit to stop.");
    }
    answer = input.nextLine();
}

我不完全确定你的意思是"但我似乎无法添加多个字符串",但你似乎打印扫描仪对象"System.out"。println(输入+" is in Zone 2");"而不是答案system . out。println(答案+" is in Zone 2");是不是因为这个你没有看到预期的结果?

public static void main (String args[]){
    Scanner input = new Scanner (System.in);
    String answer = input.nextLine();
    if (answer.equals("Mile End")) { // i would like more stations to be added but i dont no how
      System.out.println( answer +" is in Zone 2");
    } else {
      System.out.println("That is not a Station, please try again");
    }
  }

您可能需要使用else if语句

import java.util.*;
public class hello {
  public static void main (String args[]){
    Scanner input = new Scanner (System.in);
    String answer = input.nextLine();
    if ("Mile End".equals(answer)) { 
      System.out.println( answer+" is in Zone 2");
    } else if("Hobbitland".equals(answer) {
      System.out.println( answer +" is in Zone 42");
    } else
      System.out.println("That is not a Station, please try again");
    }
  }
}

或者你可以使用这样的开关:

import java.util.*;
public class hello {
  public static void main (String args[]){
    Scanner input = new Scanner (System.in);
    String answer = input.nextLine();
    switch(answer){
      case "Mile End":
        System.out.println( answer +" is in Zone 2");
        break;
      case "Hobbitland":
        System.out.println( answer +" is in Zone 42");
        break;
      default:
        System.out.println("That is not a Station, please try again");
        break;
    }
  }
}

还有其他方法可以解决这个问题,而不需要如此复杂的控制结构。只需创建一个Map,将站点名称作为键并将其区域作为值。当你得到一个输入时,你只需在地图中查找它并检索它的区域。

为什么不创建一个以区域为键,值为该区域下的站点列表的地图呢?

你可以有一个方法来处理地图的人口…

private static Map<String, List<String>> createZoneMap() {
    Map<String, List<String>> zoneMap = new HashMap<String, List<String>>();
    // Probably want to populate this map from a file
    return zoneMap;
}

那么你的main可以看起来像…

public static void main(String args[]) {
    Map<String, List<String>> zoneMap = createZoneMap();
    Scanner scan = new Scanner(System.in);
    String input;
    while (true) {
        input = scan.nextLine();
        // Some code to exit the application...
        if (input.equalsIgnoreCase("quit")) {            
            System.out.println("Exiting...");
            System.exit(1);
        }
        String zone = findZone(zoneMap, input);
        if (zone != null) {
            System.out.println(input + " is in " + zone);
        } else {
            System.out.println("That is not a Station, please try again");
        }
    }
}

然后当你输入车站名称时,你会在地图上查找该车站所属的区域,如果不存在则返回null或其他

private static String findZone(Map<String, List<String>> zoneMap, String station) {
    // Maybe make this more versatile so that it does not care about case...
    for (Map.Entry<String, List<String>> entry : zoneMap.entrySet()) {
        if (entry.getValue().contains(station)) {
            return entry.getKey();
        }
    }
    return null;
}

希望这是一个很好的起点。您还可以考虑不再在main方法中执行所有逻辑,而是在main方法中创建类的实例。

最新更新