试图获得诸如aaabb = a3bb之类的输出。给我错误?

时间:2015-11-13 11:37:18

标签: java

我不知道我做错了什么。我忘记了最后的事情或我错过了什么。

我想要完成的是用户输入一个字符串,例如:aaabbcccc然后输出:a3bbc4,所以任何包含3个或更多字符的字符都应显示该字母然后它在字符串中的次数。

我是否在某个地方搞砸了我看不到,或者它是在它给我输出的时候到底。

TL; DR字符串输入:aaabbcccc输出:a3bbc4。让用户输入然后在尝试提供输出时给出错误。

执行命令

Enter a string(only lowercase):    aaabb

Exception in thread "main" java.lang.NullPointerException

at hw9.RunLengthCode.compress(Hw9.java:26)

at hw9.RunLengthCode.getCText(Hw9.java:20)

at hw9.Hw9.main(Hw9.java:55)

C:\Users\extrapcuser\AppData\Local\NetBeans\Cache\8.1\executor-
snippets\run.xml:53: Java returned: 1

BUILD FAILED (total time: 5 seconds)

代码:

import java.util.Scanner;

class RunLengthCode 
{
    String str1;
    String cText;
    String pText;

    public String setPText(String str) 
    {
        pText = str.toLowerCase();
        return pText;
    }
    public String getCText() 
    {
        compress(cText);
        return cText;

    }
    public void compress(String str) 
    {
        int count = 1;
        for(int i = 1; i < str1.length(); i++)
        {
            if(str1.charAt(i) == str1.charAt(i-1))
            {
                count++;
            }
            else if(count >= 3)
            {
                String stra = str.substring(0, i-count);
                String strb = str.substring(i-count+1, i-count+2);
                String strc = str.substring(i);
                str = stra + strb + count + strc;
                count = 1;
                i=1;
            }
        }
        if(count >= 3)
        {
            str = str.substring(0, str.length()-count+1);
        }
        cText = str;
    }
}

public class Hw9 
{
      public static void main(String[] args) 
      {
          Scanner in = new Scanner(System.in);
          RunLengthCode rLc = new RunLengthCode();

          System.out.print("Enter a string(only lowercase):    ");
          String pText = in.nextLine();

          rLc.setPText(pText);
          System.out.println(rLc.getCText());
      }
}

1 个答案:

答案 0 :(得分:1)

我在代码中发现了以下缺陷。

  1. String id="ID:SampleID"; String arr[] = id.split(":"); String key=arr[0]; String value=arr[1]; if (value != null && "".equals(value.trim())){ System.out.println("ALL IS PERFECT!!"); } else{ System.out.println("RAISE ERROR!!"); } 的原因是你没有初始化 字符串str1。并且您正在访问空引用。很明显 抛出NullPointerException
  2. cText变量永远不会被初始化。
  3. 压缩方法逻辑不会给出预期的输出,只比较相邻的字符。
  4. 我更希望使用NullPointerExceptionHashMap中找到重复的字符。

    String

    import java.util.Scanner;

    public class DuplicateCharactersInString {

    import java.util.LinkedHashMap;
    

    }

    输出:

    static LinkedHashMap<Character, Integer> charMap = new LinkedHashMap<Character, Integer>();
    
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
    
        System.out.print("Enter a string(only lowercase):    ");
        String pText = in.nextLine();
        pText = pText.toLowerCase();
        for (int i = 0; i < pText.length(); i++) {
            if (charMap.containsKey(pText.charAt(i))) {
                charMap.put(pText.charAt(i), charMap.get(pText.charAt(i)) + 1);
            } else {
                charMap.put(pText.charAt(i), 1);
            }
        }
    
        if (!charMap.isEmpty()) {
            StringBuilder builder = new StringBuilder();
            for (Character character : charMap.keySet()) {
                int value = charMap.get(character);
                if (value > 2) {
                    builder.append(character);
                    builder.append(value);
                } else {
                    for (int i = 1; i <= value; i++) {
                        builder.append(character);
                    }
                }
            }
            System.out.println(builder);
        } else {
            System.out.println("Please enter the string");
        }
    }
    

    a3b3c5d