Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从字符串中添加单个数字_Java - Fatal编程技术网

Java 从字符串中添加单个数字

Java 从字符串中添加单个数字,java,Java,我试图把一个字符串中的13个数字加在一起。我认为使用while循环是最好的方法,但我认为我把事情搞砸了。这是我的密码: import java.util.Scanner; public class ISBNChecker{ public static void main(String [] args){ String isbnNumber; int isbnTotal= 0; int index = 0; Scanner

我试图把一个字符串中的13个数字加在一起。我认为使用while循环是最好的方法,但我认为我把事情搞砸了。这是我的密码:

import java.util.Scanner;

public class ISBNChecker{
    public static void main(String [] args){
        String isbnNumber;
        int isbnTotal= 0;
        int index = 0;

        Scanner scnr = new Scanner(System.in);
        System.out.println("Enter a 13 digit ISBN Number:");
        isbnNumber = scnr.nextLine();
        if (isbnNumber.length() != 13) {
            System.out.println("Error- 13 numerical digits required");
        }
        char num = isbnNumber.charAt(index);
        while (index <13) {
        if (index % 2 == 0) {
            isbnTotal = isbnTotal + num;
            index =index + 1;
        }
        else { 
            isbnTotal = isbnTotal + (3 * num);
            index = index + 1;
        }
        }
        System.out.println(isbnTotal);
        if (isbnTotal % 10 == 0) {
            System.out.println("Valid ISBN Number");
        }
        else {
            System.out.println("Invalid ISBN Number");
        }
    }
}
import java.util.Scanner;
公共类ISBNChecker{
公共静态void main(字符串[]args){
字符串isbnNumber;
int isbnTotal=0;
int指数=0;
扫描仪scnr=新扫描仪(System.in);
System.out.println(“输入13位ISBN编号:”);
isbnNumber=scnr.nextLine();
如果(isbnNumber.length()!=13){
System.out.println(“错误-需要13位数字”);
}
char num=isbnNumber.charAt(索引);

虽然(index嗯,您似乎允许字符串输入长度大于或小于13

然后您应该在此行之后返回:-

System.out.println("Error- 13 numerical digits required");  

否则,代码将运行,即使它不是所需的长度

我发现了您的错误,您犯了一些错误

int index = 0;
while (index < 13) {
    char num = (char) (isbnNumber.charAt(index) - '0');
    
    if (index % 2 == 0) {
        isbnTotal = isbnTotal + num;
    } else {
        isbnTotal = isbnTotal + (3 * num);
    }
    
    index++;
}
不在while循环中,导致代码始终使用相同的字符运行

问题2 当做

char num = isbnNumber.charAt(index);
实际上,您正在获取字符的ASCII值。您无法获取正确的数字值。因此,您必须执行以下操作:

char num = (char) (isbnNumber.charAt(index) - '0');
请注意,零位于两个单引号之间,这是因为我们需要零ASCII字符(38)的值

“1”-“0”=1

“9”-“0”=9


编辑:我忘了说你应该先检查字符是否是一个数字,否则你可能会尝试执行类似“a”-“0”的操作,它将等于17

import java.util.Scanner;

public class ISBNChecker{
    public static void main(String [] args){
        String isbnNumber;
        int isbnTotal= 0;
        int index = 0;

        Scanner scnr = new Scanner(System.in);
        System.out.println("Enter a 13 digit ISBN Number:");
        isbnNumber = scnr.nextLine();
        if (isbnNumber.length() != 13) {
            System.out.println("Error- 13 numerical digits required");
        }
        //Perform other operations if it's length is 13
                else{
        //initiliizing num for 1st time + convert the character at index to 
        number
        int num = Character.getNumericValue(isbnNumber.charAt(index));
        while (index <13) {
        if (index % 2 == 0) isbnTotal = isbnTotal + num;
        else isbnTotal = isbnTotal + (3 * num);
    
        //increment outside of if else - less code
        index = index + 1;
        //verify if index is not out of bounds for charAt() 
        //then change num value + conversion
        if(index<13 )
        num = Character.getNumericValue(isbnNumber.charAt(index));
    
        }
          
        System.out.println(isbnTotal);
        if (isbnTotal % 10 == 0)   System.out.println("Valid ISBN Number");
        else  System.out.println("Invalid ISBN Number");
        }
        

    }
}
import java.util.Scanner;
公共类ISBNChecker{
公共静态void main(字符串[]args){
字符串isbnNumber;
int isbnTotal=0;
int指数=0;
扫描仪scnr=新扫描仪(System.in);
System.out.println(“输入13位ISBN编号:”);
isbnNumber=scnr.nextLine();
如果(isbnNumber.length()!=13){
System.out.println(“错误-需要13位数字”);
}
//如果长度为13,则执行其他操作
否则{
//第一次初始化num+将索引处的字符转换为
数
int num=Character.getNumericValue(isbnNumber.charAt(index));
(指数)在你的问题中用一个答案来感谢别人,也许是一个赞成票。
import java.util.Scanner;

public class ISBNChecker{
    public static void main(String [] args){
        String isbnNumber;
        int isbnTotal= 0;
        int index = 0;

        Scanner scnr = new Scanner(System.in);
        System.out.println("Enter a 13 digit ISBN Number:");
        isbnNumber = scnr.nextLine();
        if (isbnNumber.length() != 13) {
            System.out.println("Error- 13 numerical digits required");
        }
        //Perform other operations if it's length is 13
                else{
        //initiliizing num for 1st time + convert the character at index to 
        number
        int num = Character.getNumericValue(isbnNumber.charAt(index));
        while (index <13) {
        if (index % 2 == 0) isbnTotal = isbnTotal + num;
        else isbnTotal = isbnTotal + (3 * num);
    
        //increment outside of if else - less code
        index = index + 1;
        //verify if index is not out of bounds for charAt() 
        //then change num value + conversion
        if(index<13 )
        num = Character.getNumericValue(isbnNumber.charAt(index));
    
        }
          
        System.out.println(isbnTotal);
        if (isbnTotal % 10 == 0)   System.out.println("Valid ISBN Number");
        else  System.out.println("Invalid ISBN Number");
        }
        

    }
}