0

ユーザーが指定した文字列を圧縮および解凍するには、このコードが必要です。圧縮するには、ユーザーは「Java圧縮-c」または単に「Java圧縮」と入力します。解凍する場合は「java圧縮-d」となります。どんな助けでも大歓迎です。コンパイルして実行します。ただし、文字列を入力すると、圧縮された文字列ではなく圧縮のみが出力されます。

import java.util.*;
public class practice
{
    public static void main(String args[])
    {
        Scanner scan = new Scanner(System.in);
        String originalString = scan.nextLine();
        String compressedString = "";
        int index = 0;
        int numReps = 0;
        char nextChar = ' ';
        if (args.length==0 || args[0].equals("-c"))
        {
            System.out.println("compress");
            String s = scan.next();
            compress(originalString);
            System.out.println(compressedString);
        }
        else if (args[0].equals("-d"))
        {
            System.out.println("decompress");
            decompress(compressedString);
        }
        else
        {
            System.out.println("Error! Unknown mode.");
        }

    }

    public static void compress(String originalString)
    {
        int index = 0;
        int numReps = 0;
        char nextChar = ' ';
        while (index < originalString.length())
        {
            numReps = 0;
            char c = originalString.charAt(index);
            if (!Character.isDigit(c))
            {
                nextChar = c;
                index++;
            }
            else
            {
                while (Character.isDigit(c))
                {
                    int temp = Integer.parseInt(""+c);
                    numReps = temp;
                    index++;
                    if (index >= originalString.length()) break;
                    c = originalString.charAt(index);
                }
                for (int i =0; i<numReps; i++)
                {
                    System.out.println(nextChar);
                }
            }
        }
    }

    public static void decompress(String compressedString)
    {
        int index = 0;
        int numReps = 0;
        char nextChar = ' ';

        while (index < compressedString.length())
        {
            numReps = 0;
            char c = compressedString.charAt(index);
            if (!Character.isDigit(c))
            {
                nextChar = c;
                index++;
            }
            else
            {
                while (Character.isDigit(c))
                {
                    int temp = Integer.parseInt(""+c);
                    numReps = (numReps*10) + temp;
                    index++;
                    if (index >= compressedString.length()) break;
                    c = compressedString.charAt(index);
                }
                for (int i =0; i<numReps; i++)
                {
                    System.out.println(nextChar);
                }
            }   
        }
    }
}
4

2 に答える 2

1

メソッド定義の型引数を忘れました:

public static void decompress(compressedString)

する必要があります

public static void decompress(String compressedString)

またはさらに良い

public static void decompress(final String compressedString)
于 2013-10-04T23:08:21.963 に答える
0

あなたのコードには2つの問題があります(私が見る限り):-

  1. public static void decompress(compressedString)実際にあるはずpublic static void decompress(**String** compressedString)です。受信しようとしている がタイプでmethodあることを に伝える必要があります。argumentString

  2. あなたcompressdecompressメソッドにはwhile (index < input.length());. チェック; 最後に。あなたは本当にそれをしたいですか。whileループが始まる前に終了しているため、ループを実行することはありません。

于 2013-10-04T23:14:59.277 に答える