3

我的问题是如何编写一个简单的编译器,就像传真机中使用的编译器一样,它将 aaaavvvvvddddddddddd 转换为 4a5vBd。

另外,我得到“假设”,输入的任何字符串都不包含大写字母和数字,并且任何字符串将包含少于 61 个任何类型的字符,因此,我假设没有人会输入 64 continue a's in我的程序。

这是据我所知

import java.util.*;
public class Program4
{

    public static void main(String[] args)
    {
        Scanner scan = new Scanner(System.in);
        int n;
        char cn;
        String word;
        String numChars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

        System.out.println("Hello, please enter a string");
        word = scan.nextln();

        if(n <= 61)
        {
        int n = ?;
        cn = numChars.charAt(n);
        }
    }
}

我假设我需要使用一个循环,但我不知道应该用什么来计算重复的字母,然后告诉有多少该类型的字母在一行中。现在我只寻求建议而不是代码,因为我想这样做,但是作为一个初学者,我的 Java“词汇”现在还不是很大。

任何建议/提示将不胜感激。

此致 特里普斯先生

好吧,我回来了,看来我的代码在这里只打印出 147。无论我输入什么,我总是会得到 147。我试图手动跟踪我的所有变量,但是当我这样做时,我得到了我想要的,而且我的逻辑一定有一些错误。有什么想法吗?

import java.util.*;    
public class Program4
{
    public static void main(String[] args)
    {

        Scanner scan = new Scanner(System.in);
        int n = 0;
        int s = 0;
        char a;
        char b;
        char c;
        String word;
        String numChars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

        System.out.println("Please enter a string");
        word = scan.nextLine();


        while (n < word.length()) 
        {
            a = word.charAt(n);
            b = a;
            n = n ++;
            a = word.charAt(n);

            if (a == b)
            {
                    s = (s + 1) ; 
            }
            else if (a != b);
            {
                c = numChars.charAt(s);
                System.out.print(b + c);
                s = 0;
                c = 0;
                break;

            }
        }
    }
}

再次感谢你!

4

1 回答 1

3

既然你不想要代码,这在逻辑上就是这样做的。你是对的,你应该遍历每个字符的字符串。将最后一个字符存储在变量中并保留一个计数器变量。如果相等,则将当前字符与最后一个字符进行比较,然后递增计数器。一旦它不等于最后一个字符,则将 counter + last char 添加到结果字符串并重置计数器变量。每次迭代都会更新最后一个 char 变量。

于 2014-09-23T20:06:35.133 回答