首页 > 解决方案 > Pascal 尝试调用接口方法

问题描述

我正在使用 android 在 Pascal N-IDE 应用程序中运行这个 pascal 程序,然后出现这些错误:

尝试在空对象引用上调用接口方法 'com.duy.pascal.interperter.declaration.Name com.duy.pascal.interperter.declaration.lang.types.Type.getName()'

然后我尝试通过浏览器在 Pascal 在线编译器中运行这个程序,它运行良好,不知道有什么问题。

这是代码:

program testing;
uses crt;
type
    ngantri = ^node;
    node = record
        isi : string[10];
        next : ngantri;
    end;
var
    dpn, blk : ngantri;
    pointer : string;
    x : string;
    cr : string;
    pil : char;
  
    // procedure baru digunakan untuk inisialisasi awal list
    procedure baru(x : string; var tunjuk : ngantri) ;
    begin
        new(tunjuk);
        tunjuk^.isi := x;
        tunjuk^.next := nil;
    end;

    // function isempty digunakan untu mengecek apakah suatu list kosong atau tidak
    function isempty(depan, belakang : ngantri) : boolean;
    begin
        isempty := (depan = nil) and (belakang = nil) = true
    end;

    // procedure tambah ngantri digunakan untuk menambakan jumlah orang dalam antrian
    procedure tambahngantri(var belakang : ngantri); 
    var 
        x : string;
        tunjuk : ngantri;
    begin
        write('Masukkan nama orang yang mau masuk antrian : ');
        readln(x);
        baru(x, tunjuk);
        belakang^.next := tunjuk;
        belakang := tunjuk;
    end;

    // prosedure hapusdpn digunakan untuk menghapus list dalam ngantri
    procedure hapusdpn(var depan, belakang : ngantri);
    var 
        bantu : ngantri; 
    begin
        if isempty(depan, belakang) then
            writeln('Antrian Kosong')
        else if depan = belakang then
        begin
            depan := nil; 
            belakang:=nil
        end
        else
        begin
            bantu := depan^.next;
            depan := bantu;
        end;
    end;

    // prosedure selesaiantri digunakan untuk mengambil orang yang telah selesai antri
    procedure slesaingantri(var depan, belakang : ngantri; var x : string);
    begin 
        if dpn = nil then
            x := 'Antrian Kosong'
        else
        begin
            x := dpn^.isi;
            hapusdpn(depan, belakang);
        end;
    end;

    // procedure buatngantrian untuk membangun ngantri dengan input data secara interaktif
    procedure buatngantrian(var depan, belakang : ngantri);
    var 
        c : char; 
        tunjuk : ngantri; 
        i : integer;
    begin
        i := 0; 
        depan := nil; 
        belakang := nil;
        repeat 
            i := i+1;
            write('masukan nama ke-',i ,' =');
            readln(x);
            baru(x, tunjuk);
            if isempty(depan, belakang) then
            begin
                depan := tunjuk;
                belakang := tunjuk;
            end
            else
            begin
                belakang^.next := tunjuk;
                belakang := tunjuk;
            end; 
            repeat
                write('tambah data yang antri [Y/T] = ');
                readln(c);
            until c in ['T','t','y','Y'];
        until c in ['T','t'];
    end;

    // procedure cetak untuk mencetak isi Antrian, pintu keluar antrian disebelah kanan dan pintu masuk antrian disebelah kiri
    procedure cetak(depan : ngantri; var output : string);
    var 
        bantu : ngantri; 
        y : string;
    begin
        bantu := depan;
        output := ' Loket Pendaftaran';
        if isempty(dpn, blk) then 
            output := 'Antrian Kosong'
        else
        begin
            while bantu<>nil do
            begin
                y := bantu^.isi;
                output := y + '->>' + output; 
                bantu := bantu^.next;
            end;
            output := 'pintu masuk antrian ->>' + output;
        end;
    end;
begin
    buatngantrian(dpn, blk);
    repeat
        repeat
            // menu utama
            writeln;
            writeln('-----------------------------------');
            writeln('[1] Buat Antrian Baru '); 
            writeln('[2] Tambah Antrian Pendaftar ');
            writeln('[3] Ambil Orang yang selesai daftar');
            writeln('[4] Loket Pendaftaran ditutup ');
            writeln('-----------------------------------');
            write('Pilihan anda : '); pil := readkey; writeln(pil);
            writeln;
        until (pil >= '1') and (pil <= '4');
        // case pil of mengacu pada menu pilihan yang akan mengaktifkan salah satu procedure yang dipilih
        case pil of
            '1' : begin
                buatngantrian(dpn, blk);
                writeln;
                writeln;
                writeln;
            end;
            '2' : begin
                tambahngantri(blk);
                writeln; 
                writeln('setelah ditambah antrian menjadi : '); 
                cetak(dpn, pointer);
                writeln(pointer);
                writeln;
                writeln;
                writeln;
            end;
            '3' : begin
                slesaingantri(dpn, blk, x); 
                writeln('',x ,' Telah selesai mendaftar,maka ia keluar dari antrian');
                writeln;
                writeln('Antrian menjadi :'); 
                cetak(dpn, pointer);
                writeln(pointer);
                writeln;
                writeln;
                writeln;
            end;
            '4' : begin
                writeln(' Loket telah ditutup ');
                writeln('Antrian dilanjutkan hari berikutnya');
                exit;
            end;
        end;
    until (pil = '8');
end.
end.

标签: pascal

解决方案


推荐阅读