Java - 如何在用户的两个选定字符之间打印字符?

时间:2013-12-22 20:13:34

标签: java char

该程序应该从用户获取两个char值,并且每行要显示的char值数量。然后输出用户输入的两个char值和每行各个chars之间的char值。 这是我的代码:

import java.util.Scanner;

public class DisplayCharactersInBetween {
    public static void main(String[] args) {

        Scanner console = new Scanner(System.in);
        String ch1, ch2;
        int charsPerLine;
        System.out.print("Between what two characters do you wish to print: ");
        ch1 = console.next();
        ch2 = console.next();
        System.out.print("And how many chars per line: ");
        charsPerLine = console.nextInt();
        printChars(ch1.charAt(0), ch2.charAt(0), charsPerLine);
        console.close();
    }

    public static void printChars(char ch1, char ch2, int charsPerLine) {
        int difference = (int)(ch2 - ch1);
        for (int i = 0; i < difference; i++) {
            System.out.print(++ch1 + " ");
            if (ch1 == ch2)
                break;
            if (i % charsPerLine == 0)
                System.out.print(++ch1 + "\n");
        }
    }

}

例如我选择a和z。我还选择4作为每行数。我首先不明白为什么第一行只有两个字母而后面几个有5个字母。

这是我的输出:

b c

d e f g h

i j k l m

n o p q r

s t u v w

x y z 

5 个答案:

答案 0 :(得分:1)

您可以尝试这些修改,也可以考虑问题的逻辑。它比你想象的容易:

<强>代码

public static void printChars(char ch1, char ch2, int charsPerLine)
{
    int difference = (int) (ch2 - ch1);

    for (int i = 1; i < difference; i++) { // Adjust the range, start in 1 so it doesn't print another line when i == 0
        System.out.print(++ch1 + " ");
        if (i % charsPerLine == 0) { // Just check if (i % 4 == 0)
            System.out.print("\n");
        }
    }
}

您无需检查是否ch1 == ch2,因为for语句会为您“执行”。

<强>输出:

b c d e 
f g h i 
j k l m 
n o p q 
r s t u 
v w x y 

这会打印 az之间的所有字符

答案 1 :(得分:0)

i应为(i + 1),我将if更改为if/else。它现在有效

public static void printChars(char ch1, char ch2, int charsPerLine) {
    int difference = (int) (ch2 - ch1);
    for (int i = 0; i < difference; i++) {

        if (ch1 == ch2) {
            break;
        }
        if ((i + 1) % charsPerLine == 0) {
            System.out.print(ch1++ + "\n");
        } else {
            System.out.print(ch1++ + " ");
        }
    }
}

输入

a z 4

输出

a b c d
e f g h
i j k l
m n o p
q r s t
u v w x
y 

答案 2 :(得分:0)

好的,我想澄清一下:你想要从每个点到点X打印指定数量的字符(x和y是字母之间的间隔?

如果是,那么算法可以是:

int  printAmount = 3;
  char letter1='a';
  char letter3='z';
  char letter2=(char) ((int)letter1+printAmount-1);

  for(letter1='a';letter1<=letter3;letter1++){
      System.out.print(letter1);
      if(letter1==letter2){
          System.out.println();
          letter2+=printAmount;
      }

  }

这不是很优雅的方式,但它有效(如果我理解你的目的)。此外,它只是一种算法,如果你愿意,你可以根据自己的情况进行调整。

答案 3 :(得分:0)

使用char转换为int:

的事实可以简化for循环
for (int c = ch1 + 1; c < ch2; c++)
    System.out.print((char) c + ((c - ch1)%charsPerLine == 0 ? "\n":" "));

输出 view full code here):

b c d e f
g h i j k
l m n o p
q r s t u
v w x y 

答案 4 :(得分:0)

为什么第一行只有2个字符? - 因为在第一次迭代中i = 0且0%0 = 0,这意味着在第一次迭代中你打印b c和一个换行符。

你也在最后打印z(这是你想要的吗?)。试试这个(它不打印z,如果你需要z然后只需替换&lt; by&lt; =):

public static void printChars(char ch1, char ch2, int charsPerLine) {
    int difference = (int)(ch2 - ch1);
    ch1++;
    for (int i = 1; i < difference; i++) {
        System.out.print(ch1++ + " ");
        if (i % charsPerLine == 0)
            System.out.print("\n");
    }
}

我建议你学习如何在java中使用调试(使用eclipse或任何其他IDE非常容易) - 很容易发现像这样的错误。