Пожалуйста, отметьте это как домашнее задание, если это уместно.
Вы делаете большую ошибку, которую делают все программисты, когда они начинают: вы не разбираете свою проблему.Вы написали строку за строкой кода, внедрили ее в метод main, и теперь вы не можете видеть, как вносить изменения или исправлять ошибки.
Мой совет - разбить проблему на более мелкие методы, которыеВы можете понять, разработать и проверить легче.Создайте свое решение, вызвав эти методы.
Похоже на то, что вам нужно, это метод reset()
, который может вернуть голосование на ноль.
Вот как я бы написалЭто.Некоторые вещи, возможно, еще не были представлены вам в вашем классе, но вы поймете, что я имею в виду относительно небольших методов.Я не особо беспокоился о меню, которое, как я знаю, вы хотите представить.В конце концов, я ленивый.Я также симулировал голосование с помощью генератора случайных чисел по той же причине.
Я запустил его с этими названиями в качестве входных данных, взятых с какого-то веб-сайта:
"Black And Yellow" Grenade Firework "F**kin' Perfect" "I Need A Doctor"
Вот результаты, которые яполучил обратно:
Black And Yellow 6
Grenade 5
Firework 3
F**kin' Perfect 3
I Need A Doctor 3
Process finished with exit code 0
Это исходный код:
package mtv;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Random;
/**
* Survey
* @author Michael
* @since 2/13/11
*/
public class Survey
{
private static final int MAX_VOTES = 200;
private Map<Song, Integer> survey;
public Survey(List<Song> songs)
{
this.survey = new HashMap<Song, Integer>();
this.reset(songs);
}
public void reset(Collection<Song> songs)
{
for (Song song : songs)
{
this.survey.put(song, 0);
}
}
public void vote(Song song)
{
int votes = 0;
if (this.survey.containsKey(song))
{
votes = this.survey.get(song);
}
this.survey.put(song, ++votes);
}
public void sortByVote()
{
List<Map.Entry<Song, Integer>> list = new LinkedList<Map.Entry<Song, Integer>>(this.survey.entrySet());
Collections.sort(list, new Comparator<Map.Entry<Song, Integer>>()
{
public int compare(Map.Entry<Song, Integer> o1, Map.Entry<Song, Integer> o2)
{
return (o1).getValue().compareTo(o2.getValue());
}
});
Map<Song, Integer> result = new LinkedHashMap<Song, Integer>(this.survey.size());
for (int i = list.size()-1; i >= 0; --i)
{
Map.Entry<Song, Integer> entry = list.get(i);
result.put(entry.getKey(), entry.getValue());
}
this.survey = result;
}
public void print(PrintStream ps)
{
for (Song song : this.survey.keySet())
{
ps.printf("%20s %d %n", song, this.survey.get(song));
}
}
@Override
public String toString()
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(baos);
print(ps);
return baos.toString();
}
public static void main(String[] args)
{
List<Song> songs = new ArrayList<Song>();
for (String title : args)
{
songs.add(new Song(title));
}
Survey survey = new Survey(songs);
Random random = new Random(System.currentTimeMillis());
for (int i = 0; i < MAX_VOTES; ++i)
{
int index = random.nextInt(songs.size());
Song s = songs.get(index);
survey.vote(s);
}
survey.sortByVote();
System.out.println("Voting Results");
survey.print(System.out);
survey.reset(songs);
System.out.println("Reset Survey");
survey.print(System.out);
}
}
class Song
{
private String name;
Song(String name)
{
this.name = name;
}
@Override
public boolean equals(Object o)
{
if (this == o)
{
return true;
}
if (o == null || getClass() != o.getClass())
{
return false;
}
Song song = (Song) o;
if (name != null ? !name.equals(song.name) : song.name != null)
{
return false;
}
return true;
}
@Override
public int hashCode()
{
return name != null ? name.hashCode() : 0;
}
public String toString()
{
return this.name;
}
}