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