为了账号安全,请及时绑定邮箱和手机立即绑定

Java ISBN 校验和生成器——无限循环?

Java ISBN 校验和生成器——无限循环?

幕布斯7119047 2021-11-11 14:04:37
我需要使用字符串、字符和一堆嵌套循环和条件语句为我的 CS 类构建这个 ISBN 校验和生成器(用于 ISBN-10 和 ISBN-13)。在这个烂摊子的某个地方,我认为有些东西正在触发无限循环,因为当我被提示输入时,我给出输入并按回车键,它只是转到一个新行并希望我输入更多数据,我猜是什么时候它应该在每次成功输入后再次提示我输入另一个,否则告诉我这是不正确的,然后仍然再次要求输入另一个。当我输入 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';                }    
查看完整描述

2 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

是的,您在此for循环中缺少增量器


for (int i=0; i <= s.length();) {

改成


for (int i=0; i <= s.length(); i++) {

我相信你不想要<=,也许只是<


所以


for (int i=0; i < s.length(); i++) {

顺便说一句,如果您调试代码,这很容易解决 - 一项基本技能 -


编辑


如果您有以下代码(和 s.length == 12)


for (int i=0; i < s.length(); i++) {

    System.out.println("Enter the first 9 or 12 digits of an ISBN number. Enter QUIT to exit: ");

    s = input.next();

}

然后它将执行 12 次。修复你的循环


查看完整回答
反对 回复 2021-11-11
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

更新代码,因为我在这里实施了一些建议:


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 = ""; // Declaring string output10

        String output13 = ""; // Declaring string output13

        // main while loop

        while (!"QUIT".equalsIgnoreCase(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(); i++) {

                    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(); i++) {

                    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 + s + checkSum;

                    System.out.println("Enter the first 9 or 12 digits of an ISBN number. Enter QUIT to exit: ");

                    s = input.next();

                }

            }

            else if (!"QUIT".equalsIgnoreCase(s)) {

                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);

    }

}


查看完整回答
反对 回复 2021-11-11
  • 2 回答
  • 0 关注
  • 244 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信