-2

ユーザーがリンクされたリストに整数を追加できるプログラムを作成しようとしています。次に、最大の数、最小の数、数の合計などを計算します...私はこれに問題があり、リンクされたリストがかなり混乱していることに気づき、誰かが私が間違っていることを理解するのを手伝ってくれることを望んでいます.

import java.util.*;
public class UnorderedLinkedListInt extends LinkedListIntClass {
  int size=0;
  LinkedList<Integer> list;

  public boolean isEmptyList(){
    if(size==0){
      return true;
    }else{return false;}
  }
  public void initializeList(){
    list = new LinkedList<Integer>();
  }
  public void print(){
    for(int x : list){
      System.out.printf("%s ",x);
    }
  }
  public int length(){
    return size;
  }
  public int front(){
    return list.getFirst();
  }
  public int back(){
    return list.getLast();
  }
  public void insertFirst(int newItem){
    list.addFirst(newItem);
  }
  public void insertLast(int newItem){
    list.addLast(newItem);
  }
  public boolean search(int searchItem){
    return list.contains(searchItem);
  }
  public void deleteNode(int deleteItem){
    list.remove(deleteItem);
  }
  public int findSum(){
    int sum =0;
    for(int x:list){
      sum=sum+x;
    }
    return sum;
  }
  public int findMin(){
    int min =list.get(0);
    for(int i=1;i<list.size();i++){
      if(list.get(i)<min){
        min=list.get(i);
      }
    }
    return min;
  }
  public int findMax(){
    int max=list.get(0);
    for(int i=1;i<list.size();i++){
      if(list.get(i)>max){
        max=list.get(i);
      }
    }
    return max;
  }
}

コードをテストするために使用しているクライアント メソッドを次に示します。

import java.util.*; 
public class ClientUnorderedLinkedListInt { 
    public static void main(String[] args) { 
        Scanner input = new Scanner(System.in);
        UnorderedLinkedListInt intList = new UnorderedLinkedListInt(); 
        UnorderedLinkedListInt tempList; 
        int num; 
        System.out.println("Enter integers (999 to stop)"); 
        num = input.nextInt();//valid??
        while (num != 999) { 
            intList.insertLast((Integer) num); 
            num = input.nextInt();//valid??
        } 
        System.out.print("\nTesting .insertLast and .print. The original list is: "); 
        intList.print(); 
        System.out.println("\nTesting .length. The length of the list is: " + intList.length()); 
        if (!intList.isEmptyList()) { 
            System.out.println("Testing .front. First element/list: " + intList.front()); 
            System.out.println("Testing .back. Last element/list: "  + intList.back()); 
        } 
        System.out.println("Testing .sum. The sum of data in all nodes is: " + intList.findSum()); 
        System.out.println("Testing .min. The smallest data in all nodes is: " + intList.findMin()); 
        System.out.print("Testing .search. Enter the number to search for/list: "); 
        num = input.nextInt(); //valid??
        if (intList.search(num)) 
            System.out.println(num + " found in this list."); 
        else 
            System.out.println(num + " is not in this list."); 
        System.out.print("Testing .remove. Enter the number to be deleted from list: "); 
        num = input.nextInt();//valid??
        intList.deleteNode(num); 
        System.out.print("Testing .toString. After deleting " + num + ", the list is: " + intList); 
        System.out.println("\nThe length of the list after delete is: " + intList.length()); 
    } 
}
4

3 に答える 3

2

アイテムが追加または削除されても、サイズ変数は更新されません。可能であれば、List クラスの既存のメソッド (size()、isEmpty() など) を使用する必要があります。

また、あなたはおそらくオートボクシングの犠牲者です。リストには整数 (オブジェクト) が含まれているため、インデックスまたは「値」オブジェクトを渡すかどうかに応じて、List クラスの適切なメソッドを呼び出していることを確認する必要があります。remove(int)メソッドはオーバーロードされており、インデックス作成用のプリミティブ int またはリスト内の項目用の Integer オブジェクトのいずれかを取ることができるため、多くの人をつまずかせます。

于 2013-11-05T21:09:48.457 に答える
2

initializeList() を呼び出すか、リンクされたリストを作成して適切なデフォルト状態のままにするコンストラクターを作成する必要があります。

public UnorderedLinkedListInt() {
    super();
    initializeList();
}
于 2013-11-05T21:09:56.913 に答える
0

ここでの他の 2 つの回答 (これまでのところ) に加えて、クライアント クラスの最後から 2 番目の行に追加します。

System.out.print("Testing .toString. After deleting " + num + ", the list is: " + intList); 

あなたのコードはそのまま印刷されTesting .toString. After deleting 1, the list is: UnorderedLinkedListInt@4a5a12f5、それが望ましくない理由がわかると思います。

toString()リストをフォーマットするメソッドを書いてみてください。その後、含めるコードが機能します。

于 2013-11-05T21:21:03.760 に答える