当前位置: 首页 > 知识库问答 >
问题:

Java字符串索引出界,CharAT问题

韩玉石
2023-03-14

我的代码抛出了一个错误“字符串索引超出界限:1”,下面是代码:

     package inlamningsuppgift2;
        import java.util.Random;
        import java.util.Scanner;
        import java.lang.Math;
        
        public class inlamningsuppgift2del2 {
    
        public static void main(String[] args) {
            System.out.println("Guess a number between 01-99");
            
            randomNumber();
            
            
            
        }
        
            public static void randomNumber () {
    
        Scanner scanner = new Scanner(System.in);
        Random random = new Random();
            
        int value = Integer.valueOf(scanner.nextLine());
    
        String str1 = Integer.toString(value);
        String sa = String.format("%02d", value);
    
    
            int randomNum = 10 * random.nextInt(9);
                int randomNum2 = 1 * random.nextInt(9) +1;
                int wholeNum = randomNum + randomNum2;
                String str2 = Integer.toString(randomNum + randomNum2);
                String s = String.format("%02d", randomNum + randomNum2);
    
    
    System.out.println("You guessed :" + sa);
    System.out.println("The correct number is : " + s);
        if (str2.charAt(0) == str1.charAt(0) && str2.charAt(1) == str1.charAt(1)) {
       System.out.println("Congratulations, you guessed the right number in the right order and won 1000$!");
    }
        
    else if (str1.charAt(0) == str2.charAt(1) && str1.charAt(1) == str2.charAt(0) ) {
    System.out.println("Congratulations, you guessed the right number but in the wrong order and won 500$ !");
    }
    else if (str2.charAt(0) == str1.charAt(0) && str2.charAt(1) != str1.charAt(1)
    || str2.charAt(0) != str1.charAt(0) && str2.charAt(1) == str1.charAt(1)
    || str1.charAt(1) == str2.charAt(0) && str1.charAt(0) != str2.charAt(1)
    || str1.charAt(0) == str2.charAt(1) && str1.charAt(1) != str2.charAt(0)) {
    System.out.println("Congratulations, you guessed one of the numbers right!");
    }
    
 else {
    System.out.println("Sorry you guessed wrong, try again");
    }
    }
    }

分配指令是:“彩票程序生成一个介于01-99之间的两位数。如果用户以正确的顺序猜对了数字,他们将赢得1000美元。如果用户以错误的顺序猜对了数字,例如16而不是61,他们将赢得500美元。如果用户猜对了其中一个数字,他们将赢得100美元。”

当用户输入和/或randomNum为10或以上时,代码工作正常。然而,当它低于10时,发生错误,因为该值被读取为1个字符而不是2,例如:09被读取为9,因此charAt(1)不存在。

我怎样才能解决这个问题?有没有一种方法可以使0计数为charAt(0),以便charAt(1)计数0之后的数字,或者我需要更改其他内容?

谢谢!

共有1个答案

冯澄邈
2023-03-14

正如我在评论中提到的:您有String sa=String.format("d", value);但您在主代码中使用str1。改用sa,即使数字小于10,它也会有2个字符。

另一个选项是不使用字符串。这是一个纯数学版本。

public static void randomNumber () {
{
    System.out.println("Guess a number between 01-99");
    Scanner scanner = new Scanner(System.in);
    Random random = new Random();
                
    int value = Integer.valueOf(scanner.nextLine());
    // TODO: add a check 1 <= value <= 99
    int randomNum = random.nextInt(98) + 1;
    
    System.out.printf("You guessed :%02d%n", value);
    System.out.printf("The correct number is : %02d%n", randomNum);
    
    // Check for exact match
    if (value == randomNum) {
        System.out.println("Congratulations, you guessed the right number in the right order and won 1000$!");
        return;
    }
    
    // Get the digits of the random number (works for single digit numbers, too)
    int randOnes = randomNum % 10;
    int randTens = randomNum / 10;

    // Check for reverse match
    if (value == (randOnes * 10 + randTens)) {
        System.out.println("Congratulations, you guessed the right number but in the wrong order and won 500$ !");
        return;
    }
    
    // Get user's digits
    int userOnes = value % 10;
    int userTens = value / 10;

    // Check for single digit match
    if (userOnes == randOnes || userOnes == randTens || userTens == randOnes || userTens == randTens) {
        System.out.println("Congratulations, you guessed one of the numbers right!");
        return;
    }
    System.out.println("Sorry you guessed wrong, try again");
}
 类似资料:
  • 问题内容: 快速提问。我在程序中有以下代码: 输入是用户输入 是值为0的整数,如所见 运行代码会产生以下错误: 线程“主”中的异常java.lang.StringIndexOutOfBoundsException:字符串索引超出范围: java.lang.String.charAt为6 ( program.main(program.java:15)) 如果我将 改为0而不是,则不会产生错误… 该怎

  • 例如,我现在有一个string=“something”,如果我要访问这个字符串的最后一个索引(str.length()),它将给出“字符串索引超出范围:-1”。但是如果我通过子字符串访问它,它不会给出任何错误。 String str=“something”str.charat(9);运行时错误str.substring(9);没有错误,它不会打印任何东西。

  • 问题内容: 我猜我正在收到此错误,因为字符串正在尝试对值进行子字符串化。但是那部分不能消除这个问题吗? 这是Java代码段: 我收到此错误: 问题答案: 我猜我正在收到此错误,因为字符串试图将Null值作为子字符串。但是“ .length()> 0”部分不能消除该问题吗? 不,在itemdescription为null时调用itemdescription.length()不会生成StringInd

  • 问题内容: 因此,我正在编写一个简单的程序来输入字符串并计算总数。的米 所以,这是我的代码 where 和str是我接受过的字符串,但是此错误不断出现 这是什么错误以及如何将其删除? 问题答案: 字符串,有效索引从0到n-1; 更改 至

  • 问题内容: 从类中调用函数时出现以下错误:java.lang.StringIndexOutOfBoundsException:超出范围的字符串索引:-1尽管我使用系统打印来查看输入的内容,但仍在substring()函数中进行传递似乎是正确的。函数isContained()返回一个布尔值,该值定义作为参数传递的子字符串是否在单词列表中。我的代码是: 其中size是我在函数中传递的字符串(str)的

  • 问题内容: 我写了这个小函数只是为了练习,但是抛出了一个异常(“字符串索引超出范围:29”),我不知道为什么… (我知道这不是编写此函数的最佳方法,可以使用正则表达式。) 这是代码: 问题答案: 您是否正在从其他语言翻译此代码?您要遍历字符串,直到到达空字符(),但Java通常不会在字符串中使用这些字符。在C语言中,这可以工作,但是在您的情况下,您应该尝试 代替 此外, 如果您期望的是,在代码末尾