wipeout 2023-05-12 15:57 采纳率: 33.3%
浏览 20
已结题

循环输入直到满足条件

有题目如图

img


我的思路是 现输入一个String的字符串 digits
如果digits的长度不等于9 ,提示重新输入digits 直到长度为9
如果digits的长度等于9 然后把字符串 digits 转换成char 数组 。判断char数组每一位字符是否是数字
如果不是 就提示重新输入digits 然后重新进行判断 长度和char数组中的字符 是否满足要求

import java.util.Scanner;

public class Exer9 {
    public static void main(String[] args) {
        Scanner input =new Scanner(System.in);
        System.out.println("Enter the first 9 digits of an ISBN as integer :");
       // String [] arr=new String[10];
        String digits = input.next();
        int sum=0;
        while (true){
            if (digits.length() == 9) {
                    char arr[] = digits.toCharArray();
                    for (int i = 0; i < arr.length; i++) {
                        if (arr[i] > 57 || arr[i] < 48) {
                            System.out.println("输入的数据有非数字部分!");    //此处应该如何写?
                            return;
                        } else {
                            sum += (arr[i] - 48) * (i + 1);
                        }
                    }
                    break;
            }
            else {
                System.out.println("输入错误,请重新输入:");
                digits = input.next();
            }
        }
        String s1=null;
        if(sum%11==10)
        {
            s1="x";
        }
        else{
            s1=Integer.toString(sum%11);
        }
        System.out.println(digits+s1);
    }
}

  • 写回答

2条回答 默认 最新

  • 社区专家-Monster-XH 2023-05-12 16:12
    关注

    基本上对的,改了改:

    import java.util.Scanner;
    
    public class ISBNGenerator {
        public static void main(String[] args) {
            Scanner input = new Scanner(System.in);
            System.out.println("Enter the first 9 digits of an ISBN as an integer: ");
            String digits = input.next();
            int sum = 0;
            
            while (true) {
                if (digits.length() == 9) {
                    char[] arr = digits.toCharArray();
                    boolean isValid = true;
                    
                    for (int i = 0; i < arr.length; i++) {
                        if (!Character.isDigit(arr[i])) {
                            isValid = false;
                            break;
                        }
                        
                        sum += (arr[i] - '0') * (i + 1);
                    }
                    
                    if (isValid) {
                        break;
                    }
                }
                
                System.out.println("Invalid input, please enter 9 digits: ");
                digits = input.next();
            }
            
            String lastDigit;
            
            if (sum % 11 == 10) {
                lastDigit = "X";
            } else {
                lastDigit = Integer.toString(sum % 11);
            }
            
            String isbn = digits + lastDigit;
            System.out.println("The ISBN-10 number is: " + isbn);
        }
    }
    
    
    

    加了个判断输入有效否,

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月20日
  • 已采纳回答 5月12日
  • 创建了问题 5月12日

悬赏问题

  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染