我正在尝试创建一个使用字符数值的Java程序(A = 1,B = 2,C = 3 ......)程序会给用户一个单词(即“BABY”,“CHILD” ...)并且用户可以添加减法,乘法和除以字母以获得新字母(A + A = B)。
package QUASSINOBALLY;
import java.util.*;
import stdlib.*;
public class YeahBitch {
public static void main(String args[]){
Dictionary<String,Integer> d = new Hashtable<String,Integer>();
ArrayList<String> list = new ArrayList<String>();
list.add("baby");
list.add("child");
list.add("hog");
Random rand = new Random();
String question = list.get(rand.nextInt(list.size()));
question = question.toUpperCase();
System.out.print(question+"\n");
d.put("A",1);
d.put("B",2);
d.put("C",3);
d.put("D",4);
d.put("E",5);
d.put("F",6);
d.put("G",7);
d.put("H",8);
d.put("I",9);
d.put("J",10);
d.put("K",11);
d.put("L",12);
d.put("M",13);
d.put("N",14);
d.put("O",15);
d.put("P",16);
d.put("Q",17);
d.put("R",18);
d.put("S",19);
d.put("T",20);
d.put("U",21);
d.put("V",22);
d.put("W",23);
d.put("X",24);
d.put("Y",25);
d.put("Z",26);
System.out.println("Enter your answer here.");
String answer = StdIn.readString();
answer = answer.toUpperCase();
List<String> operators = new ArrayList<>(Arrays.asList("+", "-","*","/"));
for(int i =0;i<answer.length();i++){
if (!operators.contains(Character.toString(answer.charAt(i)))){
System.out.println("character number:"+i);
System.out.println("character it is now:"+Character.toString(answer.charAt(i)));
System.out.println("character it is going to be:"+d.get(Character.toString(answer.charAt(i))));
answer = answer.replaceFirst(Character.toString(answer.charAt(i)),(d.get(Character.toString(answer.charAt(i))).toString()));
System.out.println(answer);
}
}
System.out.println("Finished!");
}
}
使用print语句试图帮助调试,并可能帮助您进行调试。
该程序可以运行,但有时则不运行。
运行时的例子:“a + b + c + d”,“d + c + b + a”,“d + c + b + d”......'
不运行的时间示例:“b + a + b + y”,“c + h + i + l + d”......
似乎程序中断的次数多,在具有字符值0-6的“b + a + b + y”的例子中,程序检查元素7并获得值“5”。我一直试图调试这个并没有取得多大进展。是否有一个特定的代码区域太乱了?我更喜欢提示,而不是有人告诉我一个明确的答案。
感谢您的时间。
答案 0 :(得分:0)
在阅读和写作时,您似乎对字符串中的位置有问题。在&#34; CHILD&#34;它一直运行到L,因为L = 12它写在两个位置。然后而不是阅读&#34; D&#34;它读了下一个字母&#34; 2&#34;因为&#34; 2&#34;没有定义它给出一个空指针。
这是我在运行代码的控制台上得到的结果:
character number:3
character it is now:L
character it is going to be:12
38912D
character number:4
character it is now:2
character it is going to be:null
Exception in thread "main" java.lang.NullPointerException
您必须跳过两位数字才能阅读下一个字母。这就是为什么输入像&#34; a + b + c + d&#34;,&#34; d + c + b + a&#34;,&#34; d + c + b + d&#34 ;正确运行,因为它们的数值小于10。