java程序中出現link(java常見的運行時異常)

本文目錄一覽:

不大對吧。你建了一個名為 newLink 類型為 Link的實例 ,newLink 個具體存在的。 你在 2)中執行 「 newLink.next = first; 」 這條語句,實際上就把 原來的 newLink 中的內容覆蓋了, 當然這時候你也訪問不到 原來那個 新申請的對象了。 這樣3)也毫無意義,因為newLink 與 first 是同一個 實例。

第一句執行:

▁▁▁▁▁▁ newLink ▁▁▁▁▁▁ first

┃ ┃

↓ ↓

┌————————————————————┐

│新分配的內存空間│ |原first指向的空│

│ │ │ 間 │

└————————————————————┘

第二句執行:

newLink▁▁▁ first

▕ ▕

▕ ▕

▕▁▁▁▁▁▁

┌————————————————————┐

│新分配的內存空間│ |原first指向的空│

│ │ │ 間 │

└————————————————————┘

第三句執行:由於newLink 與 first 指向同一空間,所以第三步驟沒有實際意義。

newLink▁▁▁ first

▕ ▕

▕ ▕

▕▁▁▁▁▁▁

┌————————————————————┐

│新分配的內存空間│ |原first指向的空│

│ │ │ 間 │

└————————————————————┘

java中 linklist出現空指針的問題

java中 linklist出現空指針的問題,集合沒有實例化吧就賦值了肯定空指針。

public static void main(String args[]) throws IOException{

int i,j,x,y;

TraceRecord path=new TraceRecord();

x=1;y=1;

System.out.print(“迷宮的路徑(0的部分)\n”);

for(i=0;i10;i++){

for(j=0;j12;j++)

System.out.print(MAZE[i][j]);

System.out.println();

}

while(x=ExitXy=ExitY){

MAZE[x][y]=2;

if(MAZE[x-1][y]==0){

x-=1;

path.insert(x, y);

}

else if(MAZE[x+1][y]==0){

x+=1;

path.insert(x, y);

}else if(MAZE[x][y-1]==0){

y-=1;

path.insert(x, y);

}else if(MAZE[x][y+1]==0){

y+=1;

path.insert(x, y);

}else if(chkExit(x,y,ExitX,ExitY)==1)

break;

else{

MAZE[x][y]=2;

path.delete();

x=path.last.x;

y=path.last.y;

}

}

System.out.print(“[老鼠走過的路徑(2的部分)]”);

for(i=0;i10;i++){

for(j=0;j12;j++)

System.out.print(MAZE[i][j]);

java中關於LinkList的問題

//單鏈表類

package dataStructure.linearList;

import dataStructure.linearList.Node; //導入單鏈表結點類

import java.util.Iterator; //導入迭代器介面

public class SinglyLinkedListE extends AbstractListE implements LListE //單鏈表類,實現線性表介面

{

protected NodeE head; //頭指針,指向單鏈表第1個結點

public SinglyLinkedList() //構造空單鏈表

{

this.head = null;

}

public SinglyLinkedList(NodeE head) //構造指定頭指針的單鏈表

{

this.head = head;

}

public boolean isEmpty() //判斷單鏈表是否為空,O(1)

{

return this.head==null;

}

public int length() //返回單鏈表長度

{ //單鏈表遍歷演算法,O(n)

int i=0;

NodeE p=this.head;

while (p!=null)

{

i++;

p = p.next;

}

return i;

}

public E get(int index) //返回序號為index的對象,index初值為0

{ //若單鏈表空或序號錯誤返回null,O(n)

if (this.head!=null index=0)

{

int j=0;

NodeE p=this.head;

while (p!=null jindex)

{

j++;

p = p.next;

}

if (p!=null)

return (E)p.data;

}

return null;

}

public E set(int index, E element) //設置序號為index的對象為element,O(n)

{ //若操作成功返回原對象,否則返回null

if (this.head!=null index=0 element!=null)

{

int j=0;

NodeE p=this.head;

while (p!=null jindex)

{

j++;

p = p.next;

}

if (p!=null)

{

E old = (E)p.data;

p.data = element;

return old; //若操作成功返回原對象

}

}

return null; //操作不成功

}

public boolean add(int index, E element) //插入element對象,插入後對象序號為index

{ //若操作成功返回true,O(n)

if (element==null)

return false; //不能添加空對象(null)

if (this.head==null || index=0) //頭插入

this.head = new NodeE(element, this.head);

else //單鏈表不空且index=1

{

int j=0;

NodeE p=this.head;

while (p.next!=null jindex-1) //尋找插入位置

{

j++;

p = p.next;

}

p.next = new NodeE(element, p.next);//中間/尾插入

}

return true;

}

public boolean add(E element) //在單鏈表最後添加對象,重載,O(n)

{

return add(Integer.MAX_VALUE, element);

}

public E remove(int index) //移去序號為index的對象,O(n)

{ //若操作成功返回被移去對象,否則返回null

E old = null;

if (this.head!=null index=0)

if (index==0) //頭刪除

{

old = (E)this.head.data;

this.head = this.head.next;

}

else //中間/尾刪除

{

int j=0;

NodeE p=this.head;

while (p.next!=null jindex-1) //定位到待刪除結點的前驅結點

{

j++;

p = p.next;

}

if (p.next!=null)

{

old = (E)p.next.data; //操作成功,返回原對象

p.next = p.next.next; //刪除p的後繼結點

}

}

return old;

}

public void clear() //清空單鏈表,O(1)

{

this.head = null;

}

public String toString() //返回顯示單鏈表所有元素值對應的字元串

{ //單鏈表遍歷演算法,O(n)

String str=”(“;

NodeE p = this.head;

while (p!=null)

{

str += p.data.toString();

p = p.next;

if (p!=null)

str += “, “;

}

return str+”)”;

}

//以上實現LList介面,第2章

//以下2.4 迭代器內容

public IteratorE iterator() //返回一個迭代器對象

{

return new Itr();

}

private class Itr implements IteratorE //私有內部類,實現迭代器介面

{

private NodeE cursor = head;

public boolean hasNext() //若有後繼元素,返回true

{

return cursor!=null cursor.next!=null;

}

public E next() //返回後繼元素

{

if (cursor != null cursor.next!=null)

{

E element = cursor.next.data;

cursor = cursor.next;

return element;

}

return null;

}

public void remove() //不支持該操作

{

throw new UnsupportedOperationException();

}

}//內部類Itr結束

//以下第8章 8.2.1 順序查找,散列表中用

public NodeE search(E element, NodeE start) //從單鏈表結點start開始順序查找指定對象

{ //若查找成功返回結點,否則返回null

if (this.head==null || element==null)

return null;

NodeE p=start;

while (p!=null !element.equals(p.data))

{

System.out.print(p.data+”? “);

p = p.next;

}

return p;

}

public NodeE search(E element) //順序查找指定對象

{

return search(element, head);

}

/*

public boolean contain(E element) //以查找結果判斷單鏈表是否包含指定對象

{ //若包含返回true,否則返回false

return this.search(element)!=null;

}

*/

public boolean remove(E element) //移去首次出現的指定對象,O(n)

{ //若操作成功返回true

if (this.head==null || element==null)

return false;

if (element.equals(this.head.data))

{

this.head = this.head.next; //頭刪除

return true;

}

NodeE front=this.head, p=front.next; //中間/尾刪除

while (p!=null !element.equals(p.data))

{

front = p;

p=p.next;

}

if (p!=null)

{

front.next = p.next;

return true;

}

return false;

}

//以下是第2章習題

public SinglyLinkedList(E[] element) //由指定數組中的多個對象構造單鏈表

{

this.head = null;

if (element!=null element.length0)

{

this.head = new Node(element[0]);

NodeE rear=this.head;

int i=1;

while (ielement.length)

{

rear.next = new Node(element[i++]);

rear = rear.next;

}

}

}

public void concat(SinglyLinkedList list) //將指定單鏈表list鏈接在當前單鏈表之後

{

if (this.head==null)

this.head = list.head;

else

{

NodeE p=this.head;

while (p.next!=null)

p = p.next;

p.next = list.head;

}

}

public SinglyLinkedList(SinglyLinkedListE list) //以單鏈表list構造新的單鏈表

{ //複製單鏈表

this.head = null;

if (list!=null list.head!=null)

{

this.head = new Node(list.head.data);

NodeE p = list.head.next;

NodeE rear = this.head;

while (p!=null)

{

rear.next = new NodeE(p.data);

rear = rear.next;

p = p.next;

}

}

}

//遞歸方法

// public SinglyLinkedList(SinglyLinkedListE list) //以單鏈表list構造新的單鏈表

public void copy(SinglyLinkedListE list) //複製單鏈表

{

this.head = copy(list.head);

}

private NodeE copy(NodeE p) //複製單鏈表,遞歸方法

{

NodeE q=null;

if (p!=null)

{

q = new Node(p.data);

q.next = copy(p.next);

}

return q;

}

/*//遞歸方法

public String toString()

{

return “(“+ this.toString(this.head) +”)”;

}

public String toString(NodeE p) //遞歸方法

{

if (p!=null)

return p.data.toString() + “, ” + this.toString(p.next); //遞歸調用

return “”;

}

public SinglyLinkedList(E[] element) //由指定數組中的多個對象構造單鏈表

{

this.head = null;

if (element!=null)

this.head = create(element,0);

}

private NodeE create(E[] element, int i) //由指定數組構造單鏈表

{ //遞歸方法

NodeE p=null;

if (ielement.length)

{

p = new Node(element[i]);

p.next = create(element, i+1);

}

return p;

}

*/

public boolean equals(Object obj) //比較兩條單鏈表是否相等

{

if (obj == this)

return true;

if (obj instanceof SinglyLinkedList)

{

SinglyLinkedList list = (SinglyLinkedList)obj;

return equals(this.head, list.head);

}

return false;

}

private boolean equals(NodeE p, NodeE q) //比較兩條單鏈表是否相等,遞歸方法

{

if (p==null q==null)

return true;

if (p!=null q!=null)

return p.data.equals(q.data) equals(p.next, q.next);

return false;

}

//以下是第8章習題

public boolean replace(Object obj, E element)//將元素值為obj的結點值替換為element,O(n)

{ //若替換成功返回true,否則返回false

if (obj==null || element==null)

return false;

NodeE p=this.head;

while (p!=null)

{

if (obj.equals(p.data))

{

p.data = element;

return true;

}

p = p.next;

}

return false;

}

public boolean replaceAll(Object obj, E element) //將所有元素值為obj的結點值替換為element,O(n)

{ //若替換成功返回true,否則返回false

boolean done=false;

if (obj!=null element!=null)

{

NodeE p=this.head;

while (p!=null)

{

if (obj.equals(p.data))

{

p.data = element;

done = true;

}

p = p.next;

}

}

return done;

}

public boolean removeAll(Object obj) //將所有元素值為obj的結點刪除

{

if (this.head==null || obj==null)

return false;

boolean done=false;

while (this.head!=null obj.equals(this.head.data))

{

this.head = this.head.next; //頭刪除

done = true;

}

NodeE front=this.head, p=front.next;

while(p!=null)

{

if (obj.equals(p.data))

{

front.next = p.next; //刪除p結點

p = front.next;

done = true;

}

else

{

front = p;

p = p.next;

}

}

return done;

}

public static void main(String[] args)

{

String[] letters={“A”,”B”,”C”,”D”,”E”,”F”};

SinglyLinkedListString list1 = new SinglyLinkedListString(letters);

SinglyLinkedListString list2 = new SinglyLinkedListString(list1);

list2.copy(list1);

System.out.println(list2.toString());

System.out.println(“equals(), “+list2.equals(list1));

}

}

/*

程序運行結果如下:

(A, B, C, D, E, F)

*/

/* 第2章 //可行,但效率低,時間複雜度是O(n*n)。

public String toString()

{

String str=”{“;

if (this.length()!=0)

{

for(int i=0; ithis.length()-1; i++)

str += this.get(i).toString()+”, “;

str += this.get(this.length()-1).toString();

}

return str+”}”;

}

*/

Java 中的 for(String link:links)是什麼意思?

這是自JDK1.5之後新出來的比較簡潔的for循環語句,就相當於

for(int i = 0;i links.length();i ++),

你這裡的link是新創建的一個String對象的引用,而links是你之前定義過的一個String字元串,不知道你聽明白沒有.建議你還是多敲敲就知道了.

PS : 本人還是喜歡傳統的for循環的寫法,因人而異

執行程序時,出現link.exe出錯,是怎麼回事

其實這樣的鏈接問題我也遇到不少,不過最後還是都解決了,對於鏈接問題,要看幾點:第一,調用函數所在的鏈接庫是否跟運行程序在一個文件夾里(如debug);第二,所調用的函數類型及參數是否跟應用程序中所聲明的回調函數一樣;第三,就是要注意在應用程序里聲明回調函數的時候應加上相應的修飾符,如(WINAPI,_stdcall…..等),不過如果是win32的DLL則不需要加這些修飾符。 你的問題估計就是第一個問題吧,也許你所允許的這個程序需要其它的DLL文件。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/286495.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-23 03:47
下一篇 2024-12-23 03:47

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智慧、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Python程序文件的拓展

    Python是一門功能豐富、易於學習、可讀性高的編程語言。Python程序文件通常以.py為文件拓展名,被廣泛應用於各種領域,包括Web開發、機器學習、科學計算等。為了更好地發揮P…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29

發表回復

登錄後才能評論