我的代码抛出了一个错误“字符串索引超出界限: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之后的数字,或者我需要更改其他内容?
谢谢!
正如我在评论中提到的:您有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语言中,这可以工作,但是在您的情况下,您应该尝试 代替 此外, 如果您期望的是,在代码末尾