Lua练习题总结

1.获得数组中最大值的例子

local arr = {1,2,3,4,5,5,5,5,8,9,1}
--            定义数组
local max = math.max(unpack(arr))
--            math.max取得参数中最大值;
--            unpack接收一个数组(table)参数,默认从下标1开始返回数组所有元素

print(max)

2.一个简单的例子来实现数字n的几次方

function my(x,n)
	local sum
	if n == 1 then
		sum = x
	else
		sum = my(x, n - 1) * x
	end
	return sum
end

print('请输入数字')
num = io.read()

print('请输入该数的次方')
n = io.read()

print(num.."的"..n.."次方是:"..my(num,n))

3.定义一个函数,传入两个参数并相加,相减,相乘,相除,取余,返回他们的运行结果

function my(x,y)
	local xy1 = x + y
	print(userNumberOne..'+'..userNumberTwo..'='..xy1)

	local xy2 = x - y
	print(userNumberOne..'-'..userNumberTwo..'='..xy2)

	local xy3 = x * y
	print(userNumberOne..'*'..userNumberTwo..'='..xy3)

	local xy4 = x / y
	print(userNumberOne..'/'..userNumberTwo..'='..xy4)

	local xy5 = x % y
	print(userNumberOne..'%'..userNumberTwo..'='..xy5)

end

print("请输入第一个数")
userNumberOne = io.read()

print("请输入第二个数")
userNumberTwo = io.read()

print(my(userNumberOne,userNumberTwo))

4.定义一个函数利用循环让这个函数能够计算n的阶乘

--~  function my(n)
--~      local i = 1
--~      if n < 1 then
--~          return 1
--~      end
--~      repeat i = n * i
--~ 		n = n - 1
--~      until n == 0
--~      print(i)
--~  end

--~  print(my(5))

5.斐波那契数列

function my(n)
	if n == 0 or n == 1 then
		return 0
	elseif n == 2 then
		return 1
	elseif n == 3 then
		return 2
	else
		return my(n - 1) + my(n - 2)
	end
end

print(my(5))

6.输出三角形的形状

a = 10
for i = 1, a, 1 do
	for j = 1, a - i, 1 do
		io.write(' ')
	end
	for k = 1, 2 * i - 1, 1 do
		io.write('*')
	end
	print()
end

7.9*9乘法表

for a = 1,9 do                
    local s = ""              
    for b=1,9 do              
        if b <= a then        
            s = s..a.."X"..b.."="..a*b 
            if a ~= b then    
                s = s.."\t"   
            end
        end
    end
    print(s)                  
end

8.要求用户输入一个年份,判断并输出该年份是闰年还是平年。

--~ year = io.read()
--~ if(year%4==0 and year%100~=0) then
--~ print("闰年")
--~ else
--~ print("平年")
--~ end

9.要求用户输入两个整数,判断第一个整数是否是第二个整数的倍数。

--~ num1 = io.read()
--~ num2 = io.read()
--~ if(num2%num1 == 0) then
--~ print("Ok")
--~ else
--~ print("No")
--~ end

10.要求用户输入一个年份和一个月份,判断(要求使用嵌套的if…else和switch分别判断一次)该年该月有多少天。

print("请输入年份")
year = io.read();
print("请输入月份")
month = io.read();
if(year%4 == 0 and year%100 ~= 0) then
	print(year.."是闰年:366天")
	local month = tonumber(month)
	if(month == 2) then
		print(month.."月是28天")
	end
else								   
	print(year.."是平年:365天")	  
	local month = tonumber(month)
	if(month == 2) then
		print(month.."月是29天")
	end
end

monthMax = {1,3,5,7,8,10,12}		
months = {4,6,9,11}					
for i,m in ipairs(monthMax)do		
	local lable = tonumber(month)	
	if m == lable then			
		print(lable.."月是31天")
	end
end

for i,m in ipairs(months)do		
	local lable = tonumber(month)
	if m == lable then
		print(lable.."月是30天")
	end
end

11.要求用户输入一个学生的分数(1~100),使用switch结构判断该分数属于什么等级(A、B、C、D、F)。

userScore = io.read()
numberScore = tonumber(userScore)

if (numberScore <= 20 and numberScore > 0) then
print("A")
end
if (numberScore <= 40 and numberScore > 20) then
print("B")
end
if (numberScore <= 60 and numberScore > 40) then
print("C")
end
if (numberScore <= 80 and numberScore > 60) then
print("D")
end
if (numberScore <= 100 and numberScore > 80) then
print("F")
end
if (numberScore <= 0) then
print("会好好输吗?")
end

12.使用while循环求1~100以内所有奇数的和。

i = 1;
J = 1;
while(i < 99)
do
	local num = i + 2
	i = num
	J = J + i
end
print(J)
--]]

13.使用while循环求式子2+22+222+2222+22222的和。p=p*10+2;

i = 0
j = 0
while(i < 22222)
do
	i = i * 10 + 2
	j = j + i
end
print(j)

14.请编程验证一下“角谷猜想”:对任意的自然数,若是奇数,就对它乘以3加1;若是偶数就对它除以2;这样得到一个新数,再按上述奇数、偶数的计算规则进行计算,一直进行下去,最终将得到1。

userScore = io.read()
numberScore = tonumber(userScore)
while(numberScore ~= 1) do
	if(numberScore % 2 == 1) then
		numberScore = numberScore * 3 + 1
	else
		numberScore = numberScore / 2
	end
	print(numberScore)
end

 

  • 7
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
在Android平台下使用Lua调用Java代码,可以使用LuaJava库来实现。下面是经验总结: 1. 下载LuaJava库和Java的jar包,并将其放置到Android工程的libs目录下。 2. 在Java代码中,需要先将Java对象注册到Lua中,以便Lua可以调用该对象的方法和属性。可以使用LuaState对象的pushJavaObject()方法将Java对象推入栈中,再使用LuaState对象的setGlobal()方法将该对象注册到Lua中。例如: ``` LuaState L = LuaStateFactory.newLuaState(); L.openLibs(); JavaObject obj = new JavaObject(); L.pushJavaObject(obj); L.setGlobal("javaObj"); ``` 3. 在Lua脚本中,使用require()函数引入LuaJava库,并使用Java对象的方法和属性。例如: ``` require("luajava") javaObj:sayHello("Hello from Lua!") ``` 4. 使用LuaJava库调用Java代码时,需要注意Java方法的参数类型和返回值类型。如果参数类型或返回值类型与Lua中的类型不匹配,则需要进行类型转换。可以使用LuaJava库的toJavaObject()和toLuaObject()方法进行类型转换。例如: ``` -- 调用Java方法 local str = "Hello from Lua!" local obj = luajava.newInstance("java.lang.String", str) local result = javaObj:callMethod("toUpperCase", obj) -- 转换返回值类型 local strResult = luajava.toJavaObject(result, "java.lang.String") -- 转换Lua类型 local table = {1, 2, 3} local array = luajava.toJavaObject(table, "int[]") ``` 5. 在Android Studio中,需要在build.gradle文件中添加以下依赖: ``` implementation 'org.keplerproject:luajava:1.2.1' implementation files('libs/javassist.jar') ``` 以上就是使用Lua调用Java代码的经验总结,希望对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橘长长长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值