不明白为什么我的程序运行方式

时间:2015-12-04 22:25:11

标签: java debugging

我正在尝试创建一个使用字符数值的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”。我一直试图调试这个并没有取得多大进展。是否有一个特定的代码区域太乱了?我更喜欢提示,而不是有人告诉我一个明确的答案。

感谢您的时间。

1 个答案:

答案 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。