Как я могу запустить это?

#java #arrays #loops #while-loop #stringbuilder

#java #массивы #циклы #цикл while #stringbuilder

Вопрос:

Похоже, я перепробовал все, но ничего не работает. Как я могу получить это, чтобы пользователь мог решить, добавлять или нет другое имя? Я могу запустить цикл for просто отлично без решения пользователя.

 import java.util.Scanner;
import java.text.DecimalFormat;

public class Part2 {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        final int STUDENT_SIZE = 50;

        char choice1 = 'n';
        int i = 0;
        int stdntLength = 0;
        boolean choice = true;

        String[] stdntName = new String[STUDENT_SIZE];
        String[] WIDNUM = new String[STUDENT_SIZE];
        int[] EXM1 = new int[STUDENT_SIZE];
        int[] EXM2 = new int[STUDENT_SIZE];
        int[] EXM3 = new int[STUDENT_SIZE];
        int[] finalExm = new int[STUDENT_SIZE];

        do {
            for (i = 0; i < stdntName.length; i  ) {
                System.out.println("Please enter the name of Student "
                          (i   1)   ": ");
                stdntName[i] = s.nextLine();
                String fullName = stdntName[i];
                String str[] = fullName.split(" ");
                StringBuilder sb = new StringBuilder();
                sb.append(str[1]);
                sb.append(", ");
                sb.append(str[0]);
                String fullname = sb.toString();

                stdntName[i] = fullname;
                System.out.println(stdntName[i]);

                System.out.print("Do you wish to enter another? (y/n): ");
                choice1 = s.next().charAt(0);
            }
        } while (choice1 == 'y');
    }
}
 

Комментарии:

1. ПОДСКАЗКА: просто спросить пользователя, хочет ли он остановиться или продолжить в конце for цикла, не оказывает ни малейшего влияния на for цикл: он продолжает работать, несмотря ни на что. И do/while цикл окружает for цикл, поэтому он не имеет никакого контроля до завершения for цикла.

Ответ №1:

do-while цикл кажется избыточным и может быть удален.

При вводе данных i-го учащегося лучше проверить ввод y и прервать, если введен какой-либо символ, отличный y от.

Обновить
Другие проблемы, которые необходимо решить:

  1. Проверьте длину str при разделении полного имени; переместите последнее имя в начало (а не только второе имя).
  2. Использовать nextLine() вместо next() при чтении choice1 — потому n что не используется, и следующее имя, прочитанное с nextLine , будет пустой строкой.
 for (i=0; i < stdntName.length; i  ) {
        System.out.println("Please enter the name of Student "   (i 1)   ": ");
        stdntName[i] = s.nextLine();
        String fullName = stdntName[i];
        String str []  = fullName.split(" ");
        if (str.length > 1) {
            StringBuilder sb = new StringBuilder();
            sb.append(str[str.length - 1]); // move the last name to beginning
            sb.append(", ");
            for (int j = 0; j < str.length - 1; j  ) { // join remaining names
                if (j > 0) {
                    sb.append(' ');
                }
                sb.append(str[j]);
            }
            
            stdntName[i] = sb.toString();
        }
        System.out.println(stdntName[i]);
        
        System.out.print("Do you wish to enter another? (y/n): ");
        choice1 = s.nextLine().toLowerCase().charAt(0); // read entire line
        if (choice1 != 'y') {
            break;
        }
    }
 

Комментарии:

1. По какой-то причине он по-прежнему выдает мне то же сообщение об ошибке

2. Что такое сообщение об ошибке и трассировка стека? Пожалуйста, отредактируйте свой вопрос, чтобы включить это.

3. Сообщение об ошибке является исключением в потоке «main» java.lang. ArrayIndexOutOfBoundsException: индекс 1 выходит за пределы длины 1 в Part2.main(Part2.java:35)