我正在尝试创建一个接受用户输入的程序,扫描每个子字符串并检查该字符是否与字母表中的位置匹配,如果匹配,我想获得分数字符串中的等效位置以获取分数该角色并显示每个角色的分数和总分。
我在下面的代码中应该已经完成了我想要做的每一部分,但是第二个 for 循环有问题,我找不到解决方案,我认为可能是里面的子字符串循环,但我不确定。
import java.util.*;
import java.io.*;
public class testt
{
public static void main(String [] args) throws IOException
{
String alpha = "abcdefghijklmnopqrstuvwxyz";
String score = "13321424185131139111144849";
String result = "";
int value = 0, total = 0;
Scanner in = new Scanner(System.in);
System.out.print("Enter word: ");
String input = in.nextLine();
if(input == null || input.length() == 0)
{
System.out.println("Enter input.");
System.exit(0);
}
String inputLower = input.replaceAll("[^a-zA-Z ]", "").toLowerCase();
String inputArray[] = inputLower.split("\\s+");
for(int i = 0; i < alpha.length(); i++)
if(inputLower.substring(i, i + 1) == alpha.substring(i, i + 1))
{
value = Integer.parseInt(score.substring(i, i + 1));
if(value == 9)
value++;
result += inputLower.substring(i, i + 1) + " will give you " + value + " point(s)\n";
total += value;
}
else if(i == alpha.length() + 1)
{
System.out.println(result + "This word will earn you: " + total);
System.exit(0);
}
}
}
任何建议或提示我都会非常感激,因为我认为我的程序已基本完成。
这是我正在学习的问题http://i.imgur.com/ftfcINX.jpg
最佳答案
您的实际代码显示了主要问题,我将指出:
- 您正在循环遍历
alpha.length
并且您有可能获得 进入StringIndexOutOfBoundsException所以最好检查一下i
不大于input.length
。 - 您正在使用
substring(i,i+1)
来获取该位置的字符 i 您可以将其替换为为此而设计的.charAt(i)
。 - 如果给定单词中出现字符,您将退出应用程序 与 alpha 中相应的不匹配,所以你要退出 不检查输入的所有字符...
我尝试更正您的代码,这是我得出的结果:
String alpha = "abcdefghijklmnopqrstuvwxyz";
String score = "13321424185131139111144849";
String result = "";
int value = 0, total = 0;
Scanner in = new Scanner(System.in);
System.out.print("Enter word: ");
String input = in.next();
for(int i = 0; i < input.length(); i++) {
if( i<alpha.length()) {
if(input.charAt(i) == alpha.charAt(i))
{
value = Integer.parseInt(score.charAt(i)+"");
if(value == 9)
value++;
result += input.charAt(i) + " will give you " + value + " point(s)\n";
total += value;
}
}
}
System.out.println(result + "This word will earn you: " + total);
这是一个 Live DEMO以 alcme
作为输入并给出以下结果:
a will give you 1 point(s)
c will give you 3 point(s)
e will give you 1 point(s)
This word will earn you: 5
关于java - 为输入的每个字符分配一个值并显示输入的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30220448/