是否可以从for循环创建一个长的名称字符串? (没有列表/数组)

时间:2016-11-09 00:46:31

标签: java string-concatenation

    System.out.println("How many teams are in this tournament?");
    no_of_teams=kb.nextInt();

    for(int x=1; x<=no_of_teams; x+=1)
    {
        System.out.println("Please enter the name of team " + x);
        team=kb.next();
    }

我希望 team 包含所有用户输入,因此我可以稍后在程序中使用String.split再次输出团队名称。

我在Reddit上问了我原来的问题,但无济于事,就是这样:

  

我们被要求创建一个运行以收集数据的程序   基于'n'的循环足球锦标赛。团队我的   问题是我必须在开始时询问所有球队名称   (我必须)基于什么不。当然,用户输入的团队,我   可以使用for循环执行此操作,输出是完美的:

输入上面的代码

  

但是,我确信你知道,这个   基本上意味着团队现在只需存储为任何一个团队    名称最后输入,因为for循环导致它被覆盖。    这是一个问题,因为后来你想要的程序    然后输出所有不同的队名,以便他们在比赛时使用    彼此相对,但团队只存储一个团队名称。运用    team1,team2,team3等是不切实际的,因为用户可以输入    团队数量无限。我们不允许使用    数组,因为我们还没有涵盖它们,并且所有的帐户都是    我要解决的方法是使用String连接和while    循环,但我不确定这将如何适用。任何帮助都会    非常感谢!感谢。

2 个答案:

答案 0 :(得分:1)

您只需将名称附加到带有附加分隔符的String:

StringBuilder team = new StringBuilder();
for(int x=1; x<=no_of_teams; x+=1)
{
    System.out.println("Please enter the name of team " + x);
    //this will add a - after each name, and then you could split on the - character
    team.append(kb.next()).append("-");
}

但是,这确实不是最好的选择。我会使用数组来存储名称。我给出的答案将返回一个大字符串,你将不得不拆分' - '。

获得字符串后,您可以通过执行以下操作将其拆分:

team.toString().split("-"); 

如果您想输出所有团队名称,您可以执行以下操作:

for(String aTeam :  team.toString().split("-")){
   System.out.println("Team Name: " + aTeam);
}

答案 1 :(得分:0)

实际上,这是可能的!为方便起见,您不必使用java提供的arrayslists,甚至隐含地像他的答案中提供的split方法BlackHatSamurai。这很简单 - 你实现自己的ArrayList!嗯,无论如何都是类似ArrayList的东西。

class MyStringStringList { 
    private static final char delimeter = '%'; //just a character not in the input
    private String internalMemory = "";

    public void add(String s) {
        internalMemory += s + delimeter;
    }

    public String getAll() {
        return internalMemory;
    }

    public String get(int index) {
        int delimeterCount = 0;
        StringBuilder currentWord = new StringBuilder();
        for (int j = 0; j < internalMemory.length(); j++) {
            if (internalMemory.charAt(j) == delimeter) {
                if (delimeterCount == index) {
                    return currentWord.toString();
                } else {
                    delimeterCount++;
                    currentWord = new StringBuilder();
                }

            } else {
                currentWord.append(internalMemory.charAt(j));
            }
        }
        throw new ArrayIndexOutOfBoundsException(index);
    }
}

为了清楚起见,我将此代码移动到了一个新类,但您可以将内部粘贴到主类中并从那里使用它。

一些用法:

MyStringStringList list = new MyStringStringList();
for (int x = 1; x <= no_of_teams; x += 1) {
    System.out.println("Please enter the name of team " + x);
    list.add(kb.next());
}
for (int i = 0; i < no_of_teams; i++) {
    System.out.println("Team number " + i+1 + ": " + list.get(i));
}

请注意,只有一个疯狂的人会这样做。低效,可能是错误的,不完整的功能......但如果你没有弄错,事实上你被禁止使用内置数组或集合,这可能是你的老师应得的“你的规则是愚蠢的”解决方案。 / p>