显示多个数组变量

displaying multiple array variables

该程序获取 2 个团队和 2 个结果的用户输入,用“:”分隔符将它们分开,然后将它们存储在数组中,当用户输入单词 "stop" 时,它不再要求用户输入并且旨在显示比赛的结果和统计数据(尚未添加到代码中)。我遇到的问题是,如果我键入多行匹配结果,然后键入 'stop',它只会将用户输入的第一行显示回控制台,而不显示其他任何一行?输入示例:"Chelsea : Arsenal : 2 : 1".

public static final String SENTINEL = "stop";

public static void main(String args[]) {

    Scanner sc = new Scanner(System.in);

    String hometeam = new String();
    String awayteam = new String();
    String homescore = new String();
    String awayscore = new String();

    int result0;
    int result1;

    System.out.println("please enter match results:");

    // loop, wil ask for match results ( b < () )
    for (int b = 0; b < 100; b++) {

        String s = sc.nextLine();

        // stop command
        while (sc.hasNextLine()) { // better than the for loop

            String line = sc.nextLine();

            String results[] = s.split(" : "); // parse strings in between
                                                // the

            for (String temp : results) {
                hometeam = results[0];
                awayteam = results[1];
                homescore = results[2];
                awayscore = results[3];
            }

            // convert 'score' strings to int value.
            result0 = Integer.valueOf(results[2]);
            result1 = Integer.valueOf(results[3]);

            if ("stop".equals(line)) {
                System.out.println(Arrays.toString(results));
                return; // exit
            }

它输出您输入的第一个结果的原因是因为 results 分配给了 s.split(" : ")s 在外部 for 循环的第一次迭代中永远不会改变,所以 s.split(" : ") 永远不会改变。您的 results 始终持有第一场比赛结果!

你的代码写得很错误。

首先,为什么在 for 循环中有一个 while 循环? for 循环是多余的。

其次,你不能为此使用数组。试试 ArrayList。数组无法动态更改其大小。

第三,我建议你为此创建一个class,代表一个MatchResult

class MatchResult {
    private String homeTeam;
    private String awayTeam;
    private int homeScore;
    private int awayScore;

    public String getHomeTeam() {
        return homeTeam;
    }

    public String getAwayTeam() {
        return awayTeam;
    }

    public int getHomeScore() {
        return homeScore;
    }

    public int getAwayScore() {
        return awayScore;
    }

    public MatchResult(String homeTeam, String awayTeam, int homeScore, int awayScore) {
        this.homeTeam = homeTeam;
        this.awayTeam = awayTeam;
        this.homeScore = homeScore;
        this.awayScore = awayScore;
    }

    @Override
    public String toString() {
        return "MatchResult{" +
            "homeTeam='" + homeTeam + '\'' +
            ", awayTeam='" + awayTeam + '\'' +
            ", homeScore=" + homeScore +
            ", awayScore=" + awayScore +
            '}';
    }
}

然后,您可以创建一个 ArrayList<MatchResult> 来存储用户输入。

Scanner sc = new Scanner(System.in);

String hometeam;
String awayteam;
int homescore;
int awayscore;
ArrayList<MatchResult> list = new ArrayList<>();

System.out.println("please enter match results:");
while (sc.hasNextLine()) { // better than the for loop

    String line = sc.nextLine();
    if ("stop".equals(line)) {
        System.out.println(Arrays.toString(list.toArray()));
        return; // exit
    }
    String results[] = line.split(" : "); // parse strings in between

    hometeam = results[0];
    awayteam = results[1];
    homescore = Integer.valueOf(results[2]);
    awayscore = Integer.valueOf(results[3]);

    list.add(new MatchResult(hometeam, awayteam, homescore, awayscore));
}

尝试只添加另一个数组

string[] matches = new string[]{};

然后将您的值输入到数组中。我正在使用 b 因为那是循环中的 int 变量。我还输入了 + " : "

matches [b] = hometeam.tostring() + " : " + awayteam.tostring() + homescore.tostring() + " : " + awayscore.tostring();

然后将打印更改为

System.out.println(Arrays.toString(matches));

我认为这应该可行,但我无法对其进行测试。

public static final String SENTINEL = "stop";

public static void main(String args[]) {

    Scanner sc = new Scanner(System.in);
    string[] matches = new string[]{};
    String hometeam = new String();
    String awayteam = new String();
    String homescore = new String();
    String awayscore = new String();

    int result0;
    int result1;

    System.out.println("please enter match results:");

    // loop, wil ask for match results ( b < () )
    for (int b = 0; b < 100; b++) {

        String s = sc.nextLine();

        // stop command
        while (sc.hasNextLine()) { // better than the for loop

            String line = sc.nextLine();

            String results[] = s.split(" : "); // parse strings in between
                                                // the

            for (String temp : results) {
                hometeam = results[0];
                awayteam = results[1];
                homescore = results[2];
                awayscore = results[3];
            }

            // convert 'score' strings to int value.
            result0 = Integer.valueOf(results[2]);
            result1 = Integer.valueOf(results[3]);

            matches [b] = hometeam.tostring() + " : " + awayteam.tostring() + homescore.tostring() + " : " + awayscore.tostring();

            if ("stop".equals(line)) {
                System.out.println(Arrays.toString(matches));
                return; // exit
            }

这是一个简单的循环,用于从用户那里获取所有数据,直到输入 "stop" 并显示输入的输出

    Scanner sc = new Scanner(System.in);
    ArrayList<String[]> stats = new ArrayList<>(); //initialize a container to hold all the stats
    System.out.println("please enter match results:");
    while(sc.hasNextLine())
    {
        String input = sc.nextLine();
        String[] results = input.split(" : ");
        if(results.length == 4)
        {
            stats.add(results);
        }
        else if(input.equals("stop"))
            break;
        else
            System.out.println("Error reading input");
    }//end of while

    for(int i = 0; i < stats.size(); i++)
    {
        try{
            System.out.println(stats.get(i)[0] + " vs " + stats.get(i)[1] + " : " +
                Integer.valueOf(stats.get(i)[2]) + " - " + Integer.valueOf(stats.get(i)[3]));
        }catch (Exception e) {
            //do nothing with any invalid input
        }
    }

输出

please enter match results:
r : b : 5 : 4
r : c : 7 : 10
j : g : 3 : 9
stop
r vs b : 5 - 4
r vs c : 7 - 10
j vs g : 3 - 9