2017-03-27 19 views
-1

プログラムが行うこと:ユーザーに4つのオプションを与えるプログラムがあります。学生を追加し、学生を削除し、学生情報を印刷して終了します。ユーザーが1を入力すると、追加する生徒が選択され、追加する生徒の数が尋ねられます。彼らは追加する必要がある人数を入力し、追加されるたびに学生クラスに必要なものすべてを記入します。オプション2を選択すると、リンクされたリストから名前で学生が削除されます。オプション3を選択すると、生徒の名前、郵便番号、および長文のみが印刷されます(他は別のプロジェクトで使用されます)。オプション4を選択すると、終了します。 4が選択されるまでこのメニューを表示し続けます。リンクされたリスト学生管理システム

私の問題点:学生をリンクリストに追加して、学生の名前で削除するのに役立つ必要があります。また 誰かが私にtoStringを説明できるなら(私の先生は私にこのようにしてくれました)、それは非常に感謝しています。

学生クラス:

public class Student { 
private int studentID; 
private String fName; 
private String lName; 
private String Address; 
private String city; 
private String state; 
private String zip; 
private String major; 


public void Student(){ 

} 

public void Student(int i, String f, String l, String a, String c, String s, String z, String m){ 
    studentID = i; 
    fName = f; 
    lName = l; 
    Address = a; 
    city = c; 
    state = s; 
    zip = z; 
    major = m; 
} 

public int getStudentID(){ 
    return studentID; 
} 
public void setStudentID(int i){ 
    studentID = i; 
} 
public String getFName(){ 
    return fName; 
} 
public void setFName(String f){ 
    fName = f; 
} 
public String getLName(){ 
    return lName; 
} 
public void setLName(String l){ 
    lName = l; 
} 
public String getAddress(){ 
    return Address; 
} 
public void setAddress(String a){ 
    Address = a; 
} 
public String getCity(){ 
    return city; 
} 
public void setCity(String c){ 
    city = c; 
} 
public String getState(){ 
    return state; 
} 
public void setState(String s){ 
    state = s; 
} 
public String getZip(){ 
    return zip; 
} 
public void setZip(String z){ 
    zip = z;; 
} 
public String getMajor(){ 
    return major; 
} 
public void setMajor(String m){ 
    major = m; 
} 

} 

リンクリストクラス:(今のところ本当に悪いです)

public class LinkedList { 

private class Node{ 
    String value; 
    Node next; 

    Node (String val, Node n){ 
     value=val; 
     next = n; 
    } 

    Node (String val) 
    { 
     this(val, null); 

    } 
} 
private Node first; 
private Node last; 

public LinkedList(){ 
    first = null; 
    last = null; 
} 

public boolean isEmpty(){ 
    return first== null; 
} 

public int size(){ 
    int count = 0; 
    Node p = first; 
    while (p !=null){ 
     count++; 
     p = p.next; 
    } 
    return count; 
} 

public void add(String s){ 
    if (isEmpty()) 
    { 
     first = new Node(s); 
     last = first; 
    } 
    else 
    { 
     last.next = new Node(s); 
     last = last.next; 

    } 
} 

public void add(int index, String s){ 
    if (index <0 || index > size()){ 
     String message = String.valueOf(index); 
     throw new IndexOutOfBoundsException(message); 
    } 


    if (index ==0){ 
     first = new Node(s, first); 
     if (last == null) 
      last = first; 
     return; 
    } 

    Node pred = first; 
    for (int k = 1; k <= index -1; k++){ 
     pred = pred.next; 
    } 
    pred.next = new Node (s, pred.next); 

    if (pred.next.next == null){ 
     last = pred.next; 
    } 
} 
public String toString(){ 
StringBuilder strBuilder = new StringBuilder(); 

Node p = first; 
while (p != null){ 
    strBuilder.append(p.value+"\n"); 
    p = p.next; 

    } 
    return strBuilder.toString(); 
} 

public String remove(int index){ 
    if (index <0 || index >=size()){ 
     String message = String.valueOf(index); 
     throw new IndexOutOfBoundsException(message); 
    } 

    String element; 
    if (index == 0){ 
     element = first.value; 
     first = first.next; 
     if (first == null){ 
      last = null; 
     } 
    } 
    else 
    { 
     Node pred = first; 
     for (int k = 1; k <=index -1; k++) 
      pred = pred.next; 


     element = pred.next.value; 
     pred.next = pred.next.next; 
     if (pred.next == null) 
      last = pred; 

    } 
    return element; 
} 




} 

主:

私の解釈から
import java.util.Scanner; 
public class StudentDemo { 

public static void main(String[] args) { 
    Scanner key = new Scanner(System.in); 
    LinkedList list = new LinkedList(); 
    menu(); 
    int input = key.nextInt(); 

     if (input == 1){ 
      if (input ==1){ 
       System.out.println("Enter name"); 
       String name = key.nextLine(); 
       list.add(name); 

       System.out.println(list); 
      } 
     } 



} 

public static void menu(){ 
    System.out.println("Student Maintenence System:"); 
    System.out.println("1. Add Student"); 
    System.out.println("2. Remove Student"); 
    System.out.println("3. Print Student Information"); 
    System.out.println("4. Exit"); 
} 

public static void optionOne(int input, LinkedList list, Scanner key){ 
    if (input ==1){ 
     System.out.println("Enter name");/*supposed to ask for a lot more but for the time being its only asking this*/ 
     String name = key.nextLine(); 
     list.add(name); 
     list.toString(); 
} 
} 
} 
+0

ご自身で課題をしてください。まずは自分で試してください。問題が発生した場合は、ここで質問してください。 – Omore

答えて

0

、それはあなたのようですリンクされたリスト内の生徒の順序は気にしないでください。あなたは、私が上記追加されたメソッドのいくつかを持っていないかもしれませんが、あなたがそれらを実装するほうが良いと思います

// This is the start of your linked list 
Node start = ...; 

public void add(String s){ 
    // This may change depending on how you construct a node 
    Node toAdd = new Node(s); 
    // Iterate until we reach the end 
    while(start.getNextNode() != null) 
     start = start.getNextNode(); 
    start.setNextNode(toAdd); 

} 

:このように次のような追加するための方法を持つことができます。

// This is the start of your linked list 
Node start = ...; 

public void remove(String s){ 
    // Iterate until we find the node who's next one is the one to delete 
    // We're assuming toString() returns the name of the student 
    while(start.getNextNode().toString() != s) 
     start = start.getNextNode(); 
    // Set our next node to the one 2 nodes down the line, thus skipping it 
    start.setNextNode(start.getNextNode().getNextNode()) 

} 

は今、あなたはtoStringメソッドが何であるかを尋ねた、そしてオブジェクトに関する情報を提供する文字列を返します。基本的には、toString()メソッド:

除去するために、あなたのようなものを使用することができます。学生のクラスの 可能性のtoString()メソッドは、JavaのすべてのオブジェクトはtoStringメソッドを持っていること

public String toString(){ 
    return "Hello! My name is " + fname + .....; // so on and so on 
} 

注ので、そのスーパークラスのメソッドをオーバーライドする独自のものを書くことができます。 toString()を使ってクラスを拡張しないと、それはtoStringのどれかに戻ってくるでしょう。そのうちの最も遠いものは、メモリの格納場所の16進コードです(これについて間違っているかもしれませんそうでない場合は私を修正してください)

これは役に立ちます!

関連する問題