首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算机程序打印新行而不是更新前一行

计算机程序打印新行而不是更新前一行
EN

Stack Overflow用户
提问于 2022-06-11 16:24:42
回答 1查看 361关注 0票数 0

每次打印一行以提高y值(基本上是换行符)时,我都会增加y(监视器的y索引)1。然而,我遇到了一个问题,当我完成mon_1.setCursorPos(x, y+1)时,它会像它应该的那样更新前面的行,但是当我执行y = y+1 mon_1.setCursorPos(x, y)时,它会打印一个新的行,而不会更新前一行。有什么建议吗?

这是完整的代码

代码语言:javascript
复制
    --Define some colors

color_fuel = 16
color_ok = 2243
color_error = 224455
color_blank = 0
color_active = 2240

--Tables
reactors={}
max_energy={}
produced={}
percent_capacity={}

--Globals
x = 1
y = 1
i = 0

--Lamps
lamp_1 = peripheral.wrap("colorful_lamp_0")
lamp_2 = peripheral.wrap("colorful_lamp_1")
lamp_3 = peripheral.wrap("colorful_lamp_2")

--Monitors
mon_1 = peripheral.wrap("monitor_3")

--Cap banks
cap_1 = peripheral.wrap("capacitor_bank_2")

--Helper functions
function flash_fuel_lamp() 
    lamp_2.setLampColor(color_blank)
    sleep(0.01)
    lamp_2.setLampColor(color_error)
    for i = 10,1,-1 do
        lamp_1.setLampColor(color_fuel)
        sleep(1)
        lamp_1.setLampColor(color_blank)
        sleep(1)
    end
    lamp_1.setLampColor(color_fuel)
end

function clear_lamps()
    lamp_1.setLampColor(color_blank)
    lamp_2.setLampColor(color_blank)
    lamp_3.setLampColor(color_blank)
end

--Boot Sequence

--Set lamps to black and clear screen
clear_lamps()
mon_1.clear()

--Turn on the reactors and set the status light to green
for k,v in pairs(peripheral.getNames()) do
    if(string.find(v, "BigReactors")) then
        reactors[i] = peripheral.wrap(v)
        i = i + 1
    else
        --print("Other Peripheral Detected")
    end
end

for k,v in pairs(reactors) do
    v.setActive(true)
end

lamp_2.setLampColor(color_ok)
lamp_3.setLampColor(color_active)

--Main loop

for key,value in pairs(max_energy) do
        mon_1.setCursorPos(x, y)
        mon_1.write("Reactor " .. key .. " Max Energy: " .. value)
        y = y + 1
end

while true do
    --Check the fuel level
    if(redstone.getAnalogInput("bottom") == 0) then
        lamp_3.setLampColor(color_blank)
        for k,v in pairs(reactors) do
            v.setActive(false)
        end
        flash_fuel_lamp()
    end
    
    for k,v in pairs(reactors) do
        if(v.getActive() == false) then
            lamp_3.setLampColor(color_blank)
        end
        --Calculate the energies
        max_energy[k] = v.getEnergyStored()
        produced[k] = v.getEnergyProducedLastTick()
        percent_capacity[k] = (max_energy[k] / produced[k]) * 100
    end
    
    --[[max_energy = reactor.getEnergyStored()
    energy_produced = reactor.getEnergyProducedLastTick()
    percent_capacity = (max_energy / energy_produced) * 100]]

    max_energy_cap = cap_1.getMaxEnergyStored()
    energy_stored = cap_1.getEnergyStored()
    percent_capacity_cap = (energy_stored / max_energy_cap) * 100
    
    y=y+1
    mon_1.setCursorPos(x, y)
    for key,value in pairs(percent_capacity) do
        for k,v in pairs(reactors) do
            mon_1.write("Reactor " .. k .. " Percent Capacity: " .. value)
            y=y+1
            mon_1.setCursorPos(x, y)
            mon_1.write("Capacitor output per tick: " .. cap_1.getAverageOutputPerTick())
            y=y+1
            mon_1.setCursorPos(x, y)
            mon_1.write("Capacitor input per tick: " .. cap_1.getAverageInputPerTick())
            y=y+1
            mon_1.setCursorPos(x, y)
        end
    end
    sleep(0.01)
end```
EN

回答 1

Stack Overflow用户

发布于 2022-06-12 15:36:29

因此,我认为您可能忘记了,当您执行mon_1.setCursorPos(x, y+1)时,您不是在递增y变量,而是将一个更高的值传递给被调用的函数,而对于y = y+1 mon_1.setCursorPos(x, y),则是在递增y

这解释了为什么在增量y时不更新前一行,因为代码底部的嵌套for-循环也使用y变量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72586040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档