2012-09-21 61 views
1

可能重复表格中的Java程序:
Need help creating a java program that prints a table of contents from a book创建输出的内容

我应该创建一个程序输出表的内容。让我给你们介绍一下我的任务。用户应该在循环中输入章节标题和起始页码,直到用户为章节标题输入4个星号。用户输入4个星号后,我应该打印输出,如

国王亚瑟法院....................... ...... 3

骑士圆桌的...... ............ 8

Dinadan先生的幽默大师.......... ........ 12

我想我的大部分编码权。在我的测试程序中,我创建了一个while循环,允许用户输入章节标题和起始页码。当用户为章节标题输入4个星号时,此循环将终止。但是,我卡住的地方是在我的while循环之后,在用户输入星号之后生成输出。而不是显示目录,我得到一个输出。我尝试了一个for循环来打印标题,点号和页码,但它只显示星号。我认为循环是错误的。

这里是我到目前为止的代码:

// My Table of Contents class 
public class TocEntry 
{ 

public TocEntry(String title, int page) // 2 Argument Constructor 
{ 
      chapterTitle = title; 
      startPage = page; 
} 


public String toString() // toString method to print out chapter title, 
         // given dots, and start page 
{ 
    String temp = "" + startPage; 
    int numDots = 60 - (temp.length()+ chapterTitle.length()); 

    String toc_out = chapterTitle; 
    for(int i = 0; i < numDots; i++) 
     toc_out=toc_out +"."; 
     toc_out= toc_out + startPage; 
    return toc_out; 
} 


private String chapterTitle; 
private int startPage; 


    }// End of class TocEntry 

// My Test program 
import java.util.Scanner; 
public class useToEntry { 

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

    final int TOCSIZE = 100;// Max size of TOC 
    TocEntry toc[] = new TocEntry[TOCSIZE]; 
    int toc_curlen = 0;// The toc_curlen is intended to keep track of the number 
         // of chapters entered by the user 

    System.out.print("Enter chapter title: "); 
    String chapterTitle = input.next(); 

    while(!"****".equals(chapterTitle)) 
    { 
     System.out.print("Enter starting page number: "); 
     int page = input.nextInt(); 

     System.out.print("Enter chapter title: "); 
     chapterTitle= input.next(); 

     toc [toc_curlen] = new TocEntry(chapterTitle,page); 
     toc_curlen = toc_curlen++; 

    }// End of while loop 

     for (int line = 0; line < toc_curlen; line++) 
     { 
     System.out.println(chapterTitle.toString()); 
     }// End of for loop 
    }// End of main method 

}// End of class useToEntry 

任何人都可以请帮我纠正我的循环产生我的输出。我接受建议。

谢谢!

+3

我们不是已经做到这一点? http://stackoverflow.com/questions/12455148/need-help-creating-a-java-program-that-prints-a-table-of-contents-from-a-book/12456026#12456026 – MadProgrammer

+0

因此投票关闭作为重复? –

+0

@Marko [标签:家庭作业]标签已经死了。不再使用它。 –

回答

0

这看起来非常像功课... 那么,首先行toc_curlen = toc_curlen++;应该缩短为toc_curlen++;(想想为什么)。

您的真正问题在于您用于打印的for循环。看看你正在打印什么,你会发现它。

1

我修改了一下你的代码。首先,当你想把许多字符串放在一起时,考虑使用StringBuilder而不是+运算符。字符串是不变的,所以每次使用+运算符的时候,一个新的String被创建,并且级联两者进入垃圾:

public String toString() 
{ 
    String temp = Integer.toString(startPage); 
    int numDots = 60 - (temp.length() + chapterTitle.length()); 

    StringBuilder sb = new StringBuilder(); 
    sb.append(chapterTitle); 
    for (int i = 0; i < numDots; i++) 
     sb.append('.'); 

    sb.append(startPage); 
    return sb.toString(); 
} 

但问题是,你没有通过你的阵列迭代,只印了当前章节标题:

for (int line = 0; line < toc_curlen; line++) 
{ 
    System.out.println(chapterTitle.toString()); 
} 

这里是main()函数的一个 “更好” 的版本:

public static void main(String[] args) 
{ 
    Scanner input = new Scanner(System.in); 
    //its much easier to work with lists 
    List<TocEntry> list = new ArrayList<TocEntry>(); 
    String chapterTitle = ""; 

    //sorry for the while(true), but it looks easier doing everything 
    //inside the loop instead ofdoing half the job outside, half inside of it. 
    while (true) 
    { 
     System.out.print("Enter chapter title: "); 
     chapterTitle = input.next(); 
     if("****".equals(chapterTitle)) break; 

     System.out.print("Enter starting page number: "); 
     int page = input.nextInt(); 

     list.add(new TocEntry(chapterTitle, page)); 
    } 

    for (TocEntry entry : list) 
     System.out.println(entry); 
} 
2

几点建议:

线

toc_curlen = toc_curlen++; 

会导致toc_curlen永远递增。你可以用它自己的增量运算符:

toc_curlen++; 

非常首次使用

String chapterTitle = input.next(); 

你永远不会把它分配给您的TocEntry阵列toc,因此本章不会被显示。

正在打印的变量chapterTitle多次在显示循环 - 你应该打印TocEntry这里:

for (int line = 0; line < toc_curlen; line++) { 
    System.out.println(toc[line].toString()); 
}