| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2181 人关注过本帖
标题:求助,代码里报错的部分要怎么修改呢
只看楼主 加入收藏
遗情处有诗章
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2017-3-10
结帖率:75%
收藏
已结贴  问题点数:19 回复次数:10 
求助,代码里报错的部分要怎么修改呢
程序代码:
import java.util.Scanner;
public class text {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
         while(in.hasNext()){
             String s = in.next();
             char type = s.charAt(0); 

             String[] str=new String[100];
                if(type == 'C'){ 

                    int len = str.length; 

                    int cnt = 1; 

                    for(int i = 0;i < len;i++){ 

                        if(str[i] == str[i+1]){ 

                            cnt++; 

                        }else{ 

                            if(cnt>1){ 

                                System.out.printf("%d",cnt); 

                            } 

                            System.out.printf("%c",str[i]); 

                            cnt = 1; 

                        } 

                    } 

                }else{ 

                    int len = str.length; 

                    int cnt = 0; 

                    for(int i = 0;i < len;i++){

                       

                        if(str[i]<='9'&&str[i]>='0'){ 

                            cnt*=10; 

                            cnt+=str[i]-'0'; 

                        }else{ 

                            if(cnt == 0){ 

                                System.out.printf("%c",str[i]); 

                            }else 

                            for(int j = 0;j < cnt;j++){ 

                                System.out.printf("%c",str[i]); 

                            } 

                            cnt = 0; 

                        } 

                    } 

                } 

         }
    in.close();
    }

}
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: str System int out printf 
2018-03-22 09:31
疯狂的小a
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:39
帖 子:423
专家分:1871
注 册:2018-2-6
收藏
得分:19 
程序代码:
import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            String s = in.next();
            char type = s.charAt(0);
            String[] str = new String[100];
            if (type == 'C') {
                int len = str.length;
                int cnt = 1;
                for (int i = 0; i < len; i++) {
                    if (str[i] == str[i + 1]) {
                        cnt++;
                    } else {
                        if (cnt > 1) {
                            System.out.printf("%d", cnt);
                        }
                        System.out.printf("%c", str[i]);
                        cnt = 1;
                    }
                }
            } else {
                int len = str.length;
                int cnt = 0;
                for (int i = 0; i < len; i++) {
                    if (str[i].toCharArray()[0] <= '9' && str[i].toCharArray()[0] >= '0') {
                        cnt *= 10;
                        cnt += str[i].toCharArray()[0] - '0';
                    } else {
                        if (cnt == 0) {
                            System.out.printf("%c", str[i]);
                        } else
                            for (int j = 0; j < cnt; j++) {
                                System.out.printf("%c", str[i]);
                            }
                        cnt = 0;
                    }
                }
            }
        }
        in.close();
    }
}
已经可以不报错了,但是会有java.lang.ArrayIndexOutOfBoundsException

假如人生没有梦想,和咸鱼有什么区别!
2018-03-22 09:53
遗情处有诗章
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2017-3-10
收藏
得分:0 
回复 2楼 疯狂的小a
现在是运行的时候有问题了
图片附件: 游客没有浏览图片的权限,请 登录注册

题目是:文本压缩有很多种方法,这里我们只考虑最简单的一种:把由相同字符组成的一个连续的片段用这个字符和片段中含有这个字符的个数来表示。例如 ccccc 就用 5c 来表示。如果字符没有重复,就原样输出。例如 aba 压缩后仍然是 aba。
解压方法就是反过来,把形如 5c 这样的表示恢复为 ccccc。
本题需要你根据压缩或解压的要求,对给定字符串进行处理。这里我们简单地假设原始字符串是完全由英文字母和空格组成的非空字符串。

图片附件: 游客没有浏览图片的权限,请 登录注册

2018-03-22 12:28
遗情处有诗章
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2017-3-10
收藏
得分:0 
回复 2楼 疯狂的小a
数组越界要怎么去修改呢
2018-03-22 12:30
疯狂的小a
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:39
帖 子:423
专家分:1871
注 册:2018-2-6
收藏
得分:0 
程序代码:
import java.util.ArrayList;
import java.util.Scanner;

/*题目是:

 * 文本压缩有很多种方法,这里我们只考虑最简单的一种:把由相同字符组成的一个连续的片段用这个字符和片段中含有这个字符的个数来表示。

 * 例如 ccccc 就用 5c 来表示。

 * 如果字符没有重复,就原样输出。

 * 例如 aba 压缩后仍然是 aba。

 * 解压方法就是反过来,把形如 5c 这样的表示恢复为 ccccc。

 * 本题需要你根据压缩或解压的要求,对给定字符串进行处理。

 * 这里我们简单地假设原始字符串是完全由英文字母和空格组成的非空字符串。
*/
public class Test {
    public static void main(String[] args) {

        // 将字符串转字符数组
        char[] chs = getCharArray();
        // 将字符数组进行压缩后转字符串
        String zipStr = zipChsToStr(chs);
        System.out.println("压缩后字符串: " + zipStr);
        // 将压缩的字符串转正常字符串
        String looseStr = getLooseStr(zipStr);
        System.out.println("解压后字符串: " + looseStr);

    }

    // 解压字符串
    public static String getLooseStr(String zipStr) {
        char[] chs = zipStr.toCharArray();
        StringBuffer looseStr = new StringBuffer("");
        for (int i = 0; i < chs.length; i++) {
            if (chs[i] > '1' && chs[i] <= '9') {
                int len = Integer.parseInt("" + chs[i]);
                for (int j = 1; j < len + 1; j++) {
                    looseStr.append(chs[i + 1]);
                }
            } else {
                looseStr.append(chs[i]);
            }
        }
        return looseStr.toString();
    }

    // 压缩字符串
    public static String zipChsToStr(char[] chs) {
        // 遍历数组,记录重复字符的索引
        ArrayList<Integer> indexs = new ArrayList<Integer>();
        indexs.add(0);
        for (int i = 0; i < chs.length - 1; i++) {
            for (int j = i + 1; j < chs.length; j++) {
                if (chs[i] == chs[j]) {
                    continue;
                } else {
                    indexs.add(j);
                    i = j - 1;
                    break;
                }
            }
        }
        // 定义一个要返回的字符串
        StringBuffer buffer = new StringBuffer("");
        for (int i = 0; i < indexs.size() - 1; i++) {
            if ((indexs.get(i + 1) - indexs.get(i)) > 1) {
                buffer.append((indexs.get(i + 1) - indexs.get(i)) + "" + chs[indexs.get(i)]);
            } else {
                buffer.append("" + chs[indexs.get(i)]);
            }
        }
        if ((chs.length - indexs.get(indexs.size() - 1)) > 1) {
            buffer.append(chs.length - indexs.get(indexs.size() - 1) + "" + chs[indexs.get(indexs.size() - 1)]);
        } else {
            buffer.append("" + chs[indexs.get(indexs.size() - 1)]);
        }
        return buffer.toString();
    }

    public static char[] getCharArray() {
        for (;;) {
            System.out.print("请输入一个字符串(由英文字母和空格组成的非空字符串):");
            Scanner sc = new Scanner(System.in);
            String str = sc.nextLine();// 输入的字符串
            // 对字符串进行校验
            char[] chs = str.toCharArray();
            boolean flag = true;
            for (char c : chs) {
                if (!((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (' ' == c))) {
                    flag = false;
                    break;
                }
            }
            if (!flag) {
                System.out.println("输入不符合要求!");
                continue;
            }
            
            sc.close();
            
            return chs;
        }
    }
}

假如人生没有梦想,和咸鱼有什么区别!
2018-03-22 18:35
遗情处有诗章
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2017-3-10
收藏
得分:0 
回复 5楼 疯狂的小a
代码运行起来还是有问题呀
输入压缩指令之后就直接运行了 (还没输入要压缩的字符串呢)
2018-03-22 19:22
疯狂的小a
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:39
帖 子:423
专家分:1871
注 册:2018-2-6
收藏
得分:0 
回复 6楼 遗情处有诗章
你说的什么意思....

假如人生没有梦想,和咸鱼有什么区别!
2018-03-22 19:44
疯狂的小a
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:39
帖 子:423
专家分:1871
注 册:2018-2-6
收藏
得分:0 
程序代码:
import java.util.ArrayList;
import java.util.Scanner;

/*题目是:

 * 文本压缩有很多种方法,这里我们只考虑最简单的一种:把由相同字符组成的一个连续的片段用这个字符和片段中含有这个字符的个数来表示。

 * 例如 ccccc 就用 5c 来表示。

 * 如果字符没有重复,就原样输出。

 * 例如 aba 压缩后仍然是 aba。

 * 解压方法就是反过来,把形如 5c 这样的表示恢复为 ccccc。

 * 本题需要你根据压缩或解压的要求,对给定字符串进行处理。

 * 这里我们简单地假设原始字符串是完全由英文字母和空格组成的非空字符串。
*/
public class Test {
    public static void main(String[] args) {

        for (;;) {
            System.out.println("请输入解压缩指令('C'表示压缩,'D'表示解压): ");
            Scanner sc = new Scanner(System.in);
            String type = sc.nextLine();
            if ((char) type.toCharArray()[0] == 'C') {
                // 将字符串转字符数组
                char[] chs = getCharArray();
                // 将字符数组进行压缩后转字符串
                String zipStr = zipChsToStr(chs);
                System.out.println("压缩后字符串: " + zipStr);
                continue;

            } else if ((char) type.toCharArray()[0] == 'D') {
                System.out.println("请输入一个要解压的字符串:");
                String zipStr = sc.nextLine();
                // 将压缩的字符串转正常字符串
                String looseStr = getLooseStr(zipStr);
                System.out.println("解压后字符串: " + looseStr);
                continue;
            } else {
                System.out.println("输入有误,请重新输入!");
                continue;
            }

        }

    }

    // 解压字符串
    public static String getLooseStr(String zipStr) {
        char[] chs = zipStr.toCharArray();
        StringBuffer looseStr = new StringBuffer("");
        for (int i = 0; i < chs.length; i++) {
            if (chs[i] > '1' && chs[i] <= '9') {
                int len = Integer.parseInt("" + chs[i]);
                for (int j = 1; j < len + 1; j++) {
                    looseStr.append(chs[i + 1]);
                }
            } else {
                looseStr.append(chs[i]);
            }
        }
        return looseStr.toString();
    }

    // 压缩字符串
    public static String zipChsToStr(char[] chs) {
        // 遍历数组,记录重复字符的索引
        ArrayList<Integer> indexs = new ArrayList<Integer>();
        indexs.add(0);
        for (int i = 0; i < chs.length - 1; i++) {
            for (int j = i + 1; j < chs.length; j++) {
                if (chs[i] == chs[j]) {
                    continue;
                } else {
                    indexs.add(j);
                    i = j - 1;
                    break;
                }
            }
        }
        // 定义一个要返回的字符串
        StringBuffer buffer = new StringBuffer("");
        for (int i = 0; i < indexs.size() - 1; i++) {
            if ((indexs.get(i + 1) - indexs.get(i)) > 1) {
                buffer.append((indexs.get(i + 1) - indexs.get(i)) + "" + chs[indexs.get(i)]);
            } else {
                buffer.append("" + chs[indexs.get(i)]);
            }
        }
        if ((chs.length - indexs.get(indexs.size() - 1)) > 1) {
            buffer.append(chs.length - indexs.get(indexs.size() - 1) + "" + chs[indexs.get(indexs.size() - 1)]);
        } else {
            buffer.append("" + chs[indexs.get(indexs.size() - 1)]);
        }
        return buffer.toString();
    }

    public static char[] getCharArray() {
        for (;;) {
            System.out.print("请输入一个字符串(由英文字母和空格组成的非空字符串):");
            Scanner sc = new Scanner(System.in);
            String str = sc.nextLine();// 输入的字符串
            // 对字符串进行校验
            char[] chs = str.toCharArray();
            boolean flag = true;
            for (char c : chs) {
                if (!((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (' ' == c))) {
                    flag = false;
                    break;
                }
            }
            if (!flag) {
                System.out.println("输入不符合要求!");
                continue;
            }
            return chs;
        }
    }
}

假如人生没有梦想,和咸鱼有什么区别!
2018-03-22 20:07
遗情处有诗章
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2017-3-10
收藏
得分:0 
回复 8楼 疯狂的小a
之前就是只输入压缩指令按下回车代码就直接运行了
这次的可以啦 多谢大神呀
2018-03-22 20:27
遗情处有诗章
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2017-3-10
收藏
得分:0 
回复 8楼 疯狂的小a
上面的代码里有我们没学过的函数,一直过不了oj
我又改了这个可以运行了 但是运行时有问题了
程序代码:
import java.util.Scanner;

public class text {
    public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    while (in.hasNext()) {
    String s = in.next();
    char type = s.charAt(0);
    String str = in.nextLine();
    char[] c=str.toCharArray();
    if (type == 'C') {
                int len = str.length();
                int cnt = 1;
                for (int i = 0; i < len; i++) {
                    if (c[i] == c[i + 1]) {
                        cnt++;
                    } else {
                        if (cnt > 1) {
                            System.out.printf("%d", cnt);
                        }
                        System.out.printf("%c", c[i]);
                        cnt = 1;
                    }
                }
            } else {
                int len = str.length();
                int cnt = 0;
                for (int i = 0; i < len; i++) {
                    if (c[i]<= '9' && c[i] >= '0') {
                        cnt *= 10;
                        cnt += c[i] - '0';
                    } else {
                        if (cnt == 0) {
                            System.out.printf("%c", c[i]);
                        } else
                            for (int j = 0; j < cnt; j++) {
                                System.out.printf("%c", c[i]);
                            }
                        cnt = 0;
                    }
                }
            }
        }
        in.close();
    }
}

2018-03-23 09:39
快速回复:求助,代码里报错的部分要怎么修改呢
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026401 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved