Мне нужно создать этот генератор контрольной суммы ISBN (для ISBN-10 и ISBN-13) для моего класса CS, используя строки, символы и набор вложенных циклов и условных операторов.Где-то в этом беспорядке, я думаю, что-то вызывает бесконечный цикл, потому что, когда мне предлагают ввести данные, я даю ввод и нажимаю ввод, и он просто переходит на новую строку и ожидает от меня ввода еще большего количества данных, которые я предполагаю, когда вместо этогоэто должно побуждать меня снова вводить еще один после каждой успешной записи и в противном случае сообщать мне, что это неверно, а затем снова запрашивать другой ввод.И когда я набираю команду quit, она не завершает программу и отображает результаты контрольной суммы, как это должно быть, вместо этого она демонстрирует то же поведение, что и другие входные данные.Если я в первый раз набираю команду quit без указания каких-либо цифр, программа завершает работу программы должным образом, но, конечно, значения выходных переменных равны нулю.
Пока мой код:
/******************************************************************************
* Program Name: Lab05A - ISBN
* Program Description: Calculate ISBN-10 AND ISBN-13
* Program Author: xxxxxxxxx
* Date Created: 10/10/2018
* Change# Change Date Programmer Name Description
* ------- ------------ ------------------- ---------------------
******************************************************************************/
package lab05a;
import java.util.Scanner;
public class Lab05A {
public static void main(String[] args) {
// Input for s
Scanner input = new Scanner(System.in); // Create new scanner
System.out.println("Enter the first 9 or 12 digits of an ISBN number. Enter QUIT to exit: "); // our ever-lasting prompt
String s = input.next(); // declare string variable "s" and set it equal to next input from user.
String output10 = null; // Declaring string output10
String output13 = null; // Declaring string output13
// main while loop
while (!"QUIT".equals(s)) { //this will run as long as the program does not receive an input of "QUIT", not case sensitive.
char checkDigit;
char checkSum = '0';
if (s.length() == 9) { //if the length of the inputted string is 9 characters...
int sum = 0; // initialize sum variable
for (int i=0; i <= s.length();) {
sum = sum + ((s.charAt(i) - '0') * (i + 1));
}
if (sum % 11 == 10) {
checkDigit = 'X';
}
else {
checkDigit = (char) ('0' + (sum % 11));
}
output10 = output10 + "\n" + s + checkDigit;
System.out.println("Enter the first 9 or 12 digits of an ISBN number. Enter QUIT to exit: ");
s = input.next();
}
else if (s.length() == 12) {
int sum = 0;
for (int i=0; i <= s.length();) {
if (i % 2 == 0) {
sum = sum + (s.charAt(i) - '0');
}
else {
sum = sum + (s.charAt(i) - '0') * 3;
}
checkSum = (char) (10 - sum % 10);
if (checkSum == 10) {
checkSum = 0;
}
output13 = "\n" + output13 + checkSum;
System.out.println("Enter the first 9 or 12 digits of an ISBN number. Enter QUIT to exit: ");
s = input.next();
}
}
else if (!s.toUpperCase().equals("QUIT")) {
System.out.println(s + " is invalid input.");
System.out.println("Enter the first 9 or 12 digits of an ISBN number. Enter QUIT to exit: ");
s = input.next();
}
}
System.out.println("The 10 digit ISBNs are \n" + output10);
System.out.println("The 13 digit ISBNs are \n" + output13);
}
}
Инструкции
Блок-схема в виде отдельного изображения, так как он довольно мал в инструкции doc
Спасибо за вашу помощь.