手动编译而不是使用netbeans时Java中的Wierd文本格式

手动编译而不是使用netbeans时Java中的Wierd文本格式,java,Java,在我的大学里,我们经常会得到一些编程作业(至少现在是这样),这些作业通常都是关于控制台编程的。当我在Netbeans中创建程序并从那里编译和运行时,一切都按预期运行。。。但是,当使用javac filename.java手动编译并使用java filename运行时,我在打印行时会遇到wierd格式错误。。。(System.out.println和System.out.printf) 以此为例,。我正在打印一个在Netbeans中运行时如下所示的表的内容: Hybel Leietager

在我的大学里,我们经常会得到一些编程作业(至少现在是这样),这些作业通常都是关于控制台编程的。当我在Netbeans中创建程序并从那里编译和运行时,一切都按预期运行。。。但是,当使用javac filename.java手动编译并使用java filename运行时,我在打印行时会遇到wierd格式错误。。。(System.out.println和System.out.printf)

以此为例,。我正在打印一个在Netbeans中运行时如下所示的表的内容:

Hybel Leietager      Saldo
--------------------------
1A    Ole Johan     6000
1B    Erik Smith    12000
1C    TOM HYBEL     0
1D    Alan Turen    9000
1E    Tim Verner    33000
1F    Anders Tanen  4999
2A    Torvald Linus 9000
2B    Rikard Stall  5001
2C    Bill Weitz    10000
2D    Steve Job     15000
2E    Steve Woz     123
2F    Denis Rich    2400
3A    James Goblin  88000
3B    Mark Sukker   456000
3C    Karl Bagasje  6000
3D    TOM HYBEL     0
3E    Ada Love      250
3F    Don Knut      55000

Periode: 9/2011
Total fortjeneste: 1400500
但是,在手动编译和运行时,我得到以下结果:

Hybel Leietager      Saldo
--------------------------
    6000 Johan
   12000k Smith
    0TOM HYBEL
   9000an Turen
   33000 Verner
 4999Anders Tanen
9000 Torvald Linus
 5001Rikard Stall
   10000l Weitz
    15000e Job
    123eve Woz
   2400nis Rich
 88000ames Goblin
  456000k Sukker
 6000Karl Bagasje
    0TOM HYBEL
     250 Love
     55000nut

Periode: 9/2011
Total fortjeneste: 1400500
我不明白,打印出来的函数是一个简单的for循环,带有System.out.println或printf。。。有人知道为什么会这样吗

这是代码,有点难理解,因为它是用挪威语写的(我知道,糟糕的练习,应该都是英语…但我们必须在课堂上做,糟糕的老师,糟糕!)

基本上,lengdenAvLengsteNavn()查找最长的名称(列在“Leietager”下)。GenererVersionTop()创建具有所需间距(取决于最长名称)的标题行。标题行是“Hybel Leietager…..Saldo”。horizontalSkille()打印出水平分线器(“----------…”),hybelOversiktLinje()实际打印出代表具有正确间距的hybel(公寓)的线。。。如您所见,没有使用选项卡或/r

private void skrivOversikt () {
    System.out.println("*** Hybel Oversikt *** \n");
    String oversiktTop = genererOversiktTop();
    System.out.println(oversiktTop);
    System.out.println(horizontalSkille (oversiktTop.length()));

    for(int i = 0; i < etasjer.length; i++) {
        Etasje etasje = etasjer[i];
        for(int j = 0; j < etasje.hybler().length; j++) {
            Hybel hybel = etasje.hybler()[j];
            System.out.print(hybelOversiktsLinje (oversiktTop, hybel) + "\n");
        }
    }

    System.out.println();
    System.out.println("Periode: " + innevaerendeMaaned + "/" + innevaerendeAar);
    System.out.println("Total fortjeneste: " + totalFortjeneste);
} //Skriver ut en oversikt over alle hybler, leietagere og deres saldo

private String genererOversiktTop () {
    String oversiktsTop = "Hybel Leietager";
    int leietagerSaldoSkille = lengdenAvLengsteNavn() - "Leietager".length();

    for (int i = 0; i < leietagerSaldoSkille; i++) {
        oversiktsTop += " ";
    }

    return oversiktsTop + " Saldo";
}

private String horizontalSkille (int lengde) {
    String skille = "";

    for (int i = 0; i < lengde; i++) {
        skille += "-";
    }

    return skille;
}

private String hybelOversiktsLinje (String oversiktsTop, Hybel hybel) {
    int leietagerIndex = oversiktsTop.indexOf("Leietager");
    int saldoIndex = oversiktsTop.indexOf("Saldo");
    String linje = hybel.romNavn();

    while (linje.length() < leietagerIndex) {
        linje += " ";
    }

    linje += hybel.leietagerNavn();

    while (linje.length() < saldoIndex) {
        linje += " ";
    }

    return linje + hybel.saldo();
}

private int lengdenAvLengsteNavn () {
    int lengsteLengde = 0;

    for (int i = 0; i < etasjer.length; i++) {
        for (int j = 0; j < etasjer[i].hybler().length; j++) {
            Hybel hybel = etasjer[i].hybler()[j];

            if (hybel.leietagerNavn().length() > lengsteLengde)
                lengsteLengde = hybel.leietagerNavn().length();
        }
    }

    return lengsteLengde;
}
private void skrivOversikt(){
System.out.println(“***Hybel Oversikt***\n”);
字符串oversiktop=generaroversiktop();
系统输出打印LN(过siktop);
System.out.println(horizontalSkille(oversiktop.length());
for(int i=0;ilengsteLengde)
lengsteLengde=hybel.leietagerNavn().length();
}
}
返回lengsteLengde;
}

因为我想输出控制台是不同的。每个字符都以不同的方式处理特殊字符,如制表。

您正在打印名称后面的
'\r'
字符。这个字符在这两个终端上的解释不同。

您应该添加println和printf语句,这样我们就可以看到哪里出错了。我怀疑使用了错误的制表符。@robinhegglundhansen可能它已经包含在
hybel.leietagerNavn()字符串中。