1

问题:编写一个名为 wordWrap 的方法,该方法接受一个代表输入文件的 Scanner 作为其参数,并将文件的每一行输出到控制台,将所有超过 60 个字符的行换行。例如,如果一行包含 112 个字符,则该方法应将其替换为两行:一行包含前 60 个字符,另一行包含最后 52 个字符。包含 217 个字符的行应分成四行:三行长度为 60,最后一行长度为 37。

我的代码:

public void wordWrap(Scanner input) {

    while(input.hasNextLine()){
        String line=input.nextLine();
        Scanner scan=new Scanner(line);
        if(scan.hasNext()){
            superOuter:
            while(line.length()>0){

                for(int i=0;i<line.length();i++){
                    if( i<60 && line.length()>59){
                        System.out.print(line.charAt(i));

                    }
                    //FINISH OFF LINE<=60 characters here

                    else if(line.length()<59){

                        for(int j=0;j<line.length();j++){
                            System.out.print(line.charAt(j));

                        }
                        System.out.println();

                        break superOuter;
                    }
                    else{
                        System.out.println();

                        line=line.substring(i);

                        break ;
                    }


                }

            }
        }
        else{
            System.out.println();
        }

    }
}

输出中的问题:

预期输出:

你好
你好吗
敏捷的棕色狐狸跳过懒惰的狗 敏捷的棕色
狐狸跳过懒狗
我没事

谢谢
敏捷的棕色狐狸跳过懒惰的狗 敏捷的棕色
狐狸跳过懒狗
敏捷的棕色狐狸跳过懒惰的狗 敏捷的棕色
狐狸跳过懒狗

敏捷的棕色狐狸跳过懒惰的狗 敏捷的棕色
狐狸跳过懒狗
敏捷的棕色狐狸跳过懒惰的狗 敏捷的棕色
狐狸跳过懒狗
敏捷的棕色狐狸跳过懒惰的狗 敏捷的棕色
狐狸跳过懒狗

这一行正好有六十个字符长;很有意思!

再见

产生的输出:

你好
你好吗
敏捷的棕色狐狸跳过懒惰的狗 敏捷的棕色
狐狸跳过懒狗
我没事

谢谢
敏捷的棕色狐狸跳过懒惰的狗 敏捷的棕色
狐狸跳过懒狗
敏捷的棕色狐狸跳过懒惰的狗 敏捷的棕色
狐狸跳过懒狗

敏捷的棕色狐狸跳过懒惰的狗 敏捷的棕色
狐狸跳过懒狗
敏捷的棕色狐狸跳过懒惰的狗 敏捷的棕色
狐狸跳过懒狗
敏捷的棕色狐狸跳过懒惰的狗 敏捷的棕色
狐狸跳过懒狗

这一行正好有六十个字符长;多么有趣!这一行正好有六十个字符;多么有趣!这一行正好有六十个字符;很有意思!...
*** 错误:第 13 行输出过多

我哪里做错了????

4

1 回答 1

0

else条件中(对于正好 60 个字符的行),您只是从内部for循环中断,而您想从外部while循环中断(因此,您最终会写出同一行 60 次)。

改为使用break superOuter少于 59 个字符的行。

于 2012-05-14T10:04:41.400 回答