使用java一維數(shù)組模擬壓棧彈棧
思路
先進(jìn)后出,優(yōu)先解決壓棧的問題,之后解決彈棧和main方法
功能
- 隨時(shí)模擬壓棧
- 隨時(shí)模擬彈棧
- 防止異常和各種錯(cuò)誤
- 隨時(shí)可以遍歷“?!敝写嬖诘淖兞康姆椒?,壓棧彈棧棧幀清晰可見!
使用演示:
壓棧:
棧滿檢測:
遍歷棧內(nèi)存和棧幀:
只要棧中有變量就會(huì)輸出棧幀:
彈棧:
棧空檢測:(沒有變量,棧幀不輸出?。?/strong>
源碼:
import java.util.Scanner; public class MoveTest01 { //局部變量供棧方法的遍歷數(shù)組使用 static int i; //創(chuàng)建Object[]數(shù)組,作為棧,并且限制“內(nèi)存上限”為5; static Object[] os = new Object[5]; //創(chuàng)建數(shù)組,模擬入棧 static num[] l = {new A(),new B(),new C(),new D(),new E(),new F()}; </p> public static void main(String[] args) { int a =0;//遍歷Object[]數(shù)組時(shí)的控制 boolean c = true;//控制循環(huán) boolean d = true;//檢測棧內(nèi)存使用量防止異常 Scanner s = new Scanner(System.in); do { System.out.println("==========================="); System.out.print("請選擇”壓?!啊皬棗!被颉傲谐鰲?nèi)存中儲(chǔ)存的變量指向的方法”,輸入“退出”將會(huì)結(jié)束程序!:"); String z = s.next(); //判定用戶輸入 if (z.equals("壓棧")) { //防止數(shù)列超限 if(a > (os.length - 1)){ d = false; System.out.println("棧內(nèi)存已滿!請彈棧后壓棧!"); } if(d){ //調(diào)用num[]數(shù)組模擬入棧 l[a].leng(); a++; } //防止if(d)鎖死 d = true; } else if (z.equals("彈棧")) { //調(diào)用pop方法,模擬彈棧,并初始化計(jì)數(shù) pop(); a = 0; i = 0; } else if (z.equals("退出")) { //結(jié)束do...while循環(huán)體 c = false; } else if (z.equals("列出棧內(nèi)存中儲(chǔ)存的變量指向的方法")) { int index = -1;//創(chuàng)建棧幀 if(os[0] == null){ System.out.println("棧內(nèi)沒有已裝載的變量!"); } for (int k = os.length - 1; k > -1; k--) { //判定如果Object[]數(shù)組內(nèi)的各個(gè)屬性,如果不等于null則輸出聲明 if(!(os[k] == null)){ index++; System.out.println("棧內(nèi)存中已入棧的變量的方法有:" + os[k]); } } //如果棧幀的值不為0,則輸出結(jié)果 if(!(index == -1)){ System.out.println(os[index] + "《== 棧幀指向"); } } }while (c); } //模擬棧 public static void Zhan(Object o){ if(i < os.length) { //給Object[]數(shù)組賦值 os[i] = o; System.out.println("目標(biāo):" + os[i] + "的所有變量已壓入棧內(nèi)!"); i++; } } </p> public static void push(String c){ //接收下面類傳來的參數(shù)并賦值給Zhan() Zhan(c); } </p> public static void pop(){ //檢測數(shù)組第一位的值是不是空,如果是則輸出消息 if(os[0] == null){ System.out.println("棧內(nèi)沒有已裝載的變量!無法彈棧!"); } //模擬彈棧 for(int k = (os.length - 1);k >= 0;k--){ //遍歷數(shù)組,將數(shù)組內(nèi)不是null的值全部輸出并初始化為null if(!(os[k] == null)) { System.out.println(os[k] + "的所有變量:已彈出內(nèi)存!"); os[k] = null; } } } } class num{ public void leng(){ //讓下面的方法有個(gè)共同的父類,并且調(diào)用時(shí)統(tǒng)一輸出自己的名字給棧 MoveTest01.push(getClass().getName()); } } //即將入方法區(qū)的方法,假設(shè)里面有變量(也可以直接把這些方法看成變量); class A extends num{ public A() {} } class B extends num{ public B() {} } class C extends num{ public C() {} } class D extends num{ public D() {} } class E extends num{ public E() {} } class F extends num{ public F() {} }
以上就是使用java一維數(shù)組模擬壓棧彈棧的詳細(xì)內(nèi)容,有興趣的朋友可直接試一試,更多關(guān)于java模擬壓棧彈棧的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java中字符串與日期轉(zhuǎn)換常見方法總結(jié)
這篇文章主要給大家介紹了關(guān)于Java中字符串與日期轉(zhuǎn)換常見方法的相關(guān)資料,在Java編程中經(jīng)常需要將字符串表示的日期轉(zhuǎn)換為日期對象進(jìn)行處理,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-11-11SpringBoot文件訪問映射如何實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot文件訪問映射如何實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02Java實(shí)現(xiàn)多個(gè)文檔合并輸出到一個(gè)文檔
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)多個(gè)文檔合并輸出到一個(gè)文檔的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10JUC循環(huán)屏障CyclicBarrier與CountDownLatch區(qū)別詳解
這篇文章主要為大家介紹了JUC循環(huán)屏障CyclicBarrier與CountDownLatch區(qū)別詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12關(guān)于SpringMVC中數(shù)據(jù)綁定@ModelAttribute注解的使用
這篇文章主要介紹了關(guān)于SpringMVC中數(shù)據(jù)綁定@ModelAttribute注解的使用,SpringMVC是一個(gè)基于Spring框架的Web框架,它提供了一種簡單、靈活的方式來開發(fā)Web應(yīng)用程序,在開發(fā)Web應(yīng)用程序時(shí),我們需要將用戶提交的數(shù)據(jù)綁定到我們的Java對象上,需要的朋友可以參考下2023-07-07springboot訪問template下的html頁面的實(shí)現(xiàn)配置
這篇文章主要介紹了springboot訪問template下的html頁面的實(shí)現(xiàn)配置,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12