Using Scanner input to do some basic math and format an output Write a static method named plusScores that accepts as a parameter a
  Scanner containing a series of lines that represent student records.
  Each student record takes up two lines of input. The first line has
  the student's name and the second line has a series of plus and minus
  characters. Below is a sample input:

Kane, Erica
--+-+
Chandler, Adam
++-+
Martin, Jake
+++++++
Dillon, Amanda
++-++-+-

  
  The number of plus/minus characters will vary, but you may assume that
  at least one such character appears and that no other
  characters appear on the second line of each pair. For each student
  you should produce a line of output withthe student's name followed by
  a colon followed by the percent of plus characters. For example, if
  the input above is stored in a Scanner called input, the call of
  plusScores(input); should produce the following output:

Kane, Erica: 40.0% plus
Chandler, Adam: 75.0% plus
Martin, Jake: 100.0% plus
Dillon, Amanda: 62.5% plus



I'm looking for alternative ways of solving this problem, and of course any potential bugs or pitfalls my code may have. If you have something interesting to share, please do! I'm new to programming and am eager to see other ways of accomplishing a problem such as this one. Here's my code:

public static void plusScores(Scanner sc) {
    while (sc.hasNextLine()) {
        String line = sc.nextLine();
        if (!line.startsWith("+") &amp;&amp; !line.startsWith("-")) {
            System.out.print(line);
        } else {

            int plus = 0;
            int minus = 0;

            for (char ch : line.toCharArray()) {
                if (ch == '+') {
                    plus++;
                } else {
                    minus++;
                }
            }

            float percentPlus = ((float) (plus) / (plus + minus)) * 100;
            System.out.format(": %.1f%% plus\n", percentPlus);
        }
    }
}
Your approach is mostly correct, but it seems to be too specifically written to solve the problem as stated.

For instance, you're making the assumption that any line that doesn't start with a plus or a minus is a line containing student names.

One example case: what if a student gets no pluses or minuses? This wouldn't occur in the case as stated, but you usually don't get this "it's already handled" and it just helps to program in such a way that input which slightly deviates from normal can still be dealt with gracefully.

You're also making the assumption that when you're counting pluses and minuses, everything that is not a plus is a minus.

This works, for now. But if changes in the scoring mechanism are requested, you might want to go with a more flexible approach - one which separates the I/O and the counting, for instance.