#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
от.
Обновить
Другие проблемы, которые необходимо решить:
- Проверьте длину
str
при разделении полного имени; переместите последнее имя в начало (а не только второе имя). - Использовать
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)