2

我在 Eclipse 中输入了以下代码,并期望每行有十个字符。但是,我无法弄清楚为什么第一行和最后一行只有 3 个字符。任何人都可以帮忙吗?

package chapter4;
import java.util.*;

public class DisplayChars {

    public static void printChars(char c1, char c2, int num){

        for(int i = (int)c1; i <= (int)c2; i++){
            if(i % num == 0)
                System.out.println("");

            System.out.print((char)i);
        }           
    }

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        System.out.println("please enter two characters and the number per line");

        char c1 = (char)input.next().charAt(0);
        char c2 = (char)input.next().charAt(0);
        int numberPerLine = input.nextInt();

        printChars(c1, c2, numberPerLine);
    }
}

输出如下:

please enter two characters and the number per line
a
z
10
abc
defghijklm
nopqrstuvw
xyz
4

4 回答 4

2

的字符代码a是 97。您可以在一行中看到字符ac因为那是字符 97-99。然后d通过m是100-109,n通过w是110-119,x通过z是120-122。

要在一行开始时获得 10,请不要将i其用作确定何时打印换行符的指示符。为此目的使用另一个变量。

于 2013-10-30T17:20:50.753 回答
1

您从“a”开始计数,而不是从零开始。值得注意的是,'a' % 10 不为零。

于 2013-10-30T17:21:01.007 回答
1

在 ASCII a=97 中,因此在 3 次迭代后您会遇到 d=100。在最后一行你的循环结束所以最后 3 个字符。

于 2013-10-30T17:21:40.243 回答
0

解释是,当第一个字符是“a”时,a 的 int 值不是 10 的倍数,因此 (i % num) 在循环的第一次迭代中可能计算为 7,导致仅打印 3 个字符在第一行。你可以这样重写它:

public static void printChars(char c1, char c2, int num){
    int count = 0;
    while (c1 <= c2) {
       System.out.print(c1);
       count++;
       if (count == num) {
         count = 0;
         System.out.println("");
       }
       c1++;
    }
}
于 2013-10-30T17:29:03.797 回答