【问题标题】:Saving a String of Integers保存一串整数
【发布时间】:2014-08-04 12:32:06
【问题描述】:

我正在解决一个与 ISBN 图书代码相关的问题。我需要制作程序,以便输入所需的 10 位代码中的 9 位。 第十个是'?'。程序需要输出适当的数字。我首先将输入字符串拆分为两个子字符串,无论是“?”被检测到。

我的问题是如何从输入字符串中获取每个整数(所以我可以将这些整数与某些数字相乘以获得最终答案)

例如:输入字符串为:'01234?6789'

如何从这个字符串中提取所有数字,以便可以对这些数字进行所有数学运算

【问题讨论】:

  • 你忘了问你的问题 :)
  • 你的意思是int a = Integer.parseInt(split[0]), b = Integer.parseInt(split[1])
  • 您的问题在哪里,您尝试过什么?
  • 看起来像家庭作业。只需拆分字符串并尝试所有 10 位数字代替“?”。如果校验位算法说没问题:宾果!
  • @SURESHATTA 我确实问了一个问题。不管怎样,我改写了它,这样它就更清楚了。

标签: java string integer save isbn


【解决方案1】:

这样的事情对你有帮助吗?

private static int getCharAsInt(int x, String number) {
        if ((int) number.charAt(x) - 48 > 9){
            //do something if the char is "?"
            //maybe return -1 to know its not a number you can use
            return -1;
        }
        else //return the char as an int
            return (int) number.charAt(x) - 48;
    }

此方法会将位置 x 处的String“数字”的char 作为int 返回,并在找到"?" 时返回-1。并不是说你可以在找到"?" 时让它做任何你喜欢的事情。

无论如何,当你这样称呼它时:

String string = "01234?6789";
for(int i = 0; i < string.length(); i++)
    System.out.print(getCharAsInt(i, string) + " ");

输出将是:

0 1 2 3 4 -1 6 7 8 9

当然,该方法返回一个int,因此您可以调用它并执行您想要获得最终答案的任何操作。

希望对你有帮助

【讨论】:

  • 感谢您的帮助。但是我怎样才能调用这些单独的整数并对它们执行数学运算。我的意思是我将使用单个变量来调用它们的名称是什么。例如,我打算使用该字符串中的 2。我应该如何从上面的例子中调用它。如果您使用与上述相同的示例进行回答,那就太好了。
  • 好的,您可以执行以下操作:int x = getCharAsInt(1, "01234?6789") 这会将第二个字符(索引 1 处的字符)存储为整数。所以在那之后,x = 1 用于这个特定的例子。
  • 您可以创建arrayints。创建一个for 循环并在每次迭代时调用此方法。填充数组后,您可以调用 array[i] 并获取该值并执行任何类型的操作。我不确定您想要什么样的操作,因此最佳方式可能会有所不同。但一般来说,您可以使用此方法从 string 中获取一个值并将其存储在某处,然后根据需要对其进行操作
  • 现在请教一个蹩脚的问题,我如何将这个函数getCharAsint调用到主函数中,以便函数'getCharAsint'完美执行。
  • 你可以有一个 int[] 大小为 10 的数组,而不是有 10 个变量,然后在 for 循环中将每个值存储在那里。然后,如果您想要第一个数字,则调用array[0];如果您想要第二个数字,则调用array[1],第三个,array[2],依此类推。您还可以更改数组索引的值,例如,如果 ? 位于索引 4 处,您可以执行一些计算并将值存储回索引 4。例如 array[4] = calculateMissingInt(); 等。当您可以得到结果时,您可以获取数组的每个值并获得最终答案。
【解决方案2】:

这包含一些您应该学习的语句序列。见 cmets。

// checks whether the ten digits in the int[] make up a valid ISBN-10
private boolean isValid( int[] digits ){
    int sum = 0;
    for( int i = 0; i < digits.length; i++ ){
        sum += (10 - i)*digits[i];
    }
    return sum % 11 == 0;
}

// Expect a string with 9 or 19 digits and at most one '?'
public String examine( String isbn ){
    if( isbn.length() != 10 )
        throw new IllegalArgumentException( "string length " + isbn.length() );
    if( ! isbn.matches( "\\d*\\??\\d*" ) )
        throw new IllegalArgumentException( "string contains invalid characters" );
    // Now we have 9 or 10 digits and at most one question mark.
    // Convert char values to int values by subtracting the integer value of '0'
    int qmPos = -1;
    int[] digit = new int[10];
    for( int iDig = 0;  iDig < isbn.length(); iDig++ ){
        char c = isbn.charAt(iDig);
        if( c == '?' ){
             qmPos = iDig;
             digit[iDig] = 0;
        } else {
            digit[iDig] = c - (int)'0';
        }
    }
    // If qmPos is still -1, there's no '?'
    if( qmPos == -1 ){
        // Is it a valid ISBN-10?
        if( isValid( digit ) ){
            return Arrays.toString( digit );
        } else {
             throw new IllegalArgumentException( "not a valid ISBN" );
        }
    }

    // Which digit can replace '?'?
    for( int probe = 0; probe <= 9; probe++ ){
        digit[qmPos] = probe;
        if( isValid( digit ) ){
            // found it - return the completed ISBN-10
            return Arrays.toString( digit );
        }
    }
    // Failure
    throw new IllegalArgumentException( "no digit completes an ISBN" );
}

【讨论】:

    猜你喜欢
    • 2011-04-26
    • 2017-06-22
    • 1970-01-01
    • 2015-08-20
    • 2021-12-06
    • 1970-01-01
    • 2015-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多