网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
11月14日漏签0天
scala吧 关注:1,461贴子:1,928
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 0回复贴,共1页
<<返回scala吧
>0< 加载中...

scala程序运行错误,以下是源代码!大家帮忙看看

  • 只看楼主
  • 收藏

  • 回复
  • dengsibao
  • 颇具名气
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
文件Element.scala 代码:
package work
import Element.elem
abstract class Element {
def contents: Array[String]
def width: Int =contents(0).length
def height: Int = contents.length
def above(that: Element): Element = {
val this1 = this widen that.width
val that1 = that widen this.width
assert(this1.width == that1.width)
elem(this1.contents ++ that1.contents)
}
def beside(that: Element): Element = {
val this1 = this heighten that.height
val that1 = that heighten this.height
elem (
for(
(line1, line2) <- this1.contents zip that1.contents
) yield line1 + line2
)
}
def widen(w:Int): Element =
if(w <= width) this
else{
val left = elem(' ',(w - width) / 2, height)
var right = elem(' ',w - width - left.width, height)
left beside this beside right
} ensuring(w <= _.width)
def heighten(h: Int): Element =
if(h <= height) this
else {
val top = elem(' ',width, (h - height) / 2)
var bot = elem(' ',width, h - height - top.height)
top above this above bot
}
override def toString = contents mkString "\n"
}
object Element {
private class ArrayElement(
val contents:Array[String]
) extends Element
private class LineElement(s:String) extends Element {
val contents = Array(s)
override def width = s.length
override def height = 1
}
private class UniformElement(
ch:Char,
override val width: Int,
override val height: Int
) extends Element {
private val line = ch.toString * width
def contents = Array(height.toString,line)
}
def elem(contents: Array[String]): Element =
new ArrayElement(contents)
def elem(chr:Char, width: Int, height: Int): Element =
new UniformElement(chr, width, height)
def elem(line: String): Element =
new LineElement(line)
}
文件stairway.scala 代码:
package work
import work.Element._
sealed abstract class Expr
case class Var(name:String) extends Expr
case class Number(num:Double) extends Expr
case class UnOp(operator:String, arg:Expr) extends Expr
case class BinOp(operator:String, left:Expr, right:Expr) extends Expr
import work._
class ExprFormatter {
private val opGroups = Array(
Set("|", "||"),
Set("&", "&&"),
Set("^"),
Set("==", "!="),
Set("<", "<=", ">", ">="),
Set("+", "-"),
Set("*", "%")
)
private val precedence = {
val assocs =
for {
i <- 0 until opGroups.length
op <- opGroups(i)
} yield op -> i
Map( ) ++ assocs
}
private val unaryPrecedence = opGroups.length
private val fractionPrecedence = -1
private def format(e:Expr, enclPrec:Int): Element =
e match {
case Var(name) =>
elem(name)
case Number(num) =>
def stripDot(s:String) =
if (s endsWith ".0") s.substring(0, s.length - 2)
else s
elem(stripDot(num.toString))
case UnOp(op,arg) => elem(op) beside format(arg, unaryPrecedence)
case BinOp("/", left, right) =>
val top = format(left, fractionPrecedence)
val bot = format(right, fractionPrecedence)
val line = elem('-', top.width max bot.width, 1)
val frac = top above line above bot
if (enclPrec != fractionPrecedence) frac
else elem(" ") beside frac beside elem (" ")
case BinOp(op, left, right) =>
val opPrec = precedence(op)
val l = format(left, opPrec)
val r = format(right, opPrec + 1)
val oper = l beside elem(" " + op + " ") beside r
if (enclPrec <= opPrec) oper
else elem("(") beside oper beside elem(")")
}
def format(e:Expr):Element = format(e, 0)
}
文件Express.scala 代码:
package work
object Express {
def main(args:Array[String]){
val f = new ExprFormatter
val e1 = BinOp("*", BinOp("/", Number(1), Number(2)),
BinOp("+", Var("x"), Number(1)))
val e2 = BinOp("+", BinOp("/", Var("x"), Number(2)),
BinOp("/", Number(1.5), Var("x")))
val e3 = BinOp("/", e1, e2)
def show(e:Expr) = println(f.format(e) + "\n\n")
for( e <- Array(e1, e2, e3)) show(e)
}
}
在eclipse 中运行,出现异常:
Exception in thread "main" java.lang.StackOverflowError
at java.lang.reflect.Array.newArray(Native Method)
at java.lang.reflect.Array.newInstance(Unknown Source)
at scala.reflect.ClassTag$class.newArray(ClassTag.scala:62)
at scala.reflect.ClassTag$$anon$1.newArray(ClassTag.scala:144)
at scala.collection.mutable.ArrayBuilder$ofRef.mkArray(ArrayBuilder.scala:64)
at scala.collection.mutable.ArrayBuilder$ofRef.resize(ArrayBuilder.scala:70)
at scala.collection.mutable.ArrayBuilder$ofRef.ensureSize(ArrayBuilder.scala:82)
at scala.collection.mutable.ArrayBuilder$ofRef.$plus$eq(ArrayBuilder.scala:87)
at scala.collection.mutable.ArrayBuilder$ofRef.$plus$eq(ArrayBuilder.scala:57)
at scala.collection.TraversableLike$WithFilter$$anonfun$map$2.apply(TraversableLike.scala:722)
at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:108)
at scala.collection.TraversableLike$WithFilter.map(TraversableLike.scala:721)
at work.Element.beside(Element.scala:22)
at work.Element.widen(Element.scala:31)
at work.Element.above(Element.scala:11)
at work.Element.heighten(Element.scala:39)
at work.Element.beside(Element.scala:18)
at work.Element.widen(Element.scala:31)
at work.Element.above(Element.scala:11)
at work.Element.heighten(Element.scala:39)
at work.Element.beside(Element.scala:18)
at work.Element.widen(Element.scala:31)
at work.Element.above(Element.scala:11)
at work.Element.heighten(Element.scala:39)
at work.Element.beside(Element.scala:18)
at work.Element.widen(Element.scala:31)
at work.Element.above(Element.scala:11)
at work.Element.heighten(Element.scala:39)
at work.Element.beside(Element.scala:18)
at work.Element.widen(Element.scala:31)
at work.Element.above(Element.scala:11)
at work.Element.heighten(Element.scala:39)
at work.Element.beside(Element.scala:18)
at work.Element.widen(Element.scala:31)
at work.Element.above(Element.scala:11)
at work.Element.heighten(Element.scala:39)
at work.Element.beside(Element.scala:18)
at work.Element.widen(Element.scala:31)
at work.Element.above(Element.scala:11)
at work.Element.heighten(Element.scala:39)
at work.Element.beside(Element.scala:18)
at work.Element.widen(Element.scala:31)
at work.Element.above(Element.scala:11)
at work.Element.heighten(Element.scala:39)
at work.Element.beside(Element.scala:18)
at work.Element.widen(Element.scala:31)
at work.Element.above(Element.scala:11)
at work.Element.heighten(Element.scala:39)
at work.Element.beside(Element.scala:18)
at work.Element.widen(Element.scala:31)
at work.Element.above(Element.scala:11)
at work.Element.heighten(Element.scala:39)
at work.Element.beside(Element.scala:18)
at work.Element.widen(Element.scala:31)
at work.Element.above(Element.scala:11)
at work.Element.heighten(Element.scala:39)
at work.Element.beside(Element.scala:18)
at work.Element.widen(Element.scala:31)
at work.Element.above(Element.scala:11)
at work.Element.heighten(Element.scala:39)
at work.Element.beside(Element.scala:18)
at work.Element.widen(Element.scala:31)
at work.Element.above(Element.scala:11)
at work.Element.heighten(Element.scala:39)
at work.Element.beside(Element.scala:18)
at work.Element.widen(Element.scala:31)
at work.Element.above(Element.scala:11)
at work.Element.heighten(Element.scala:39)
at work.Element.beside(Element.scala:18)
at work.Element.widen(Element.scala:31)
at work.Element.above(Element.scala:11)
at work.Element.heighten(Element.scala:39)
at work.Element.beside(Element.scala:18)
at work.Element.widen(Element.scala:31)
at work.Element.above(Element.scala:11)
at work.Element.heighten(Element.scala:39)
at work.Element.beside(Element.scala:18)
at work.Element.widen(Element.scala:31)
at work.Element.above(Element.scala:11)
at work.Element.heighten(Element.scala:39)
at work.Element.beside(Element.scala:18)
at work.Element.widen(Element.scala:31)
at work.Element.above(Element.scala:11)
at work.Element.heighten(Element.scala:39)
at work.Element.beside(Element.scala:18)
at work.Element.widen(Element.scala:31)
at work.Element.above(Element.scala:11)
at work.Element.heighten(Element.scala:39)
at work.Element.beside(Element.scala:18)
at work.Element.widen(Element.scala:31)
at work.Element.above(Element.scala:11)
at work.Element.heighten(Element.scala:39)
at work.Element.beside(Element.scala:18)
at work.Element.widen(Element.scala:31)
at work.Element.above(Element.scala:11)
at work.Element.heighten(Element.scala:39)
at work.Element.beside(Element.scala:18)
at work.Element.widen(Element.scala:31)
at work.Element.above(Element.scala:11)
at work.Element.heighten(Element.scala:39)
at work.Element.beside(Element.scala:18)
at work.Element.widen(Element.scala:31)
at work.Element.above(Element.scala:11)
at work.Element.heighten(Element.scala:39)
at work.Element.beside(Element.scala:18)
at work.Element.widen(Element.scala:31)
at work.Element.above(Element.scala:11)
at work.Element.heighten(Element.scala:39)
at work.Element.beside(Element.scala:18)
at work.Element.widen(Element.scala:31)
at work.Element.above(Element.scala:11)
at work.Element.heighten(Element.scala:39)
at work.Element.beside(Element.scala:18)
at work.Element.widen(Element.scala:31)
at work.Element.above(Element.scala:11)
at work.Element.heighten(Element.scala:39)
at work.Element.beside(Element.scala:18)
at work.Element.widen(Element.scala:31)
at work.Element.above(Element.scala:11)
at work.Element.heighten(Element.scala:39)
at work.Element.beside(Element.scala:18)
at work.Element.widen(Element.scala:31)
at work.Element.above(Element.scala:11)
at work.Element.heighten(Element.scala:39)
at work.Element.beside(Element.scala:18)
at work.Element.widen(Element.scala:31)
at work.Element.above(Element.scala:11)
at work.Element.heighten(Element.scala:39)
at work.Element.beside(Element.scala:18)
at work.Element.widen(Element.scala:31)
at work.Element.above(Element.scala:11)
at work.Element.heighten(Element.scala:39)
at work.Element.beside(Element.scala:18)
at work.Element.widen(Element.scala:31)
at work.Element.above(Element.scala:11)
at work.Element.heighten(Element.scala:39)
at work.Element.beside(Element.scala:18)
at work.Element.widen(Element.scala:31)
at work.Element.above(Element.scala:11)
at work.Element.heighten(Element.scala:39)
at work.Element.beside(Element.scala:18)
at work.Element.widen(Element.scala:31)
at work.Element.above(Element.scala:11)
at work.Element.heighten(Element.scala:39)
at work.Element.beside(Element.scala:18)
at work.Element.widen(Element.scala:31)
at work.Element.above(Element.scala:11)
at work.Element.heighten(Element.scala:39)
at work.Element.beside(Element.scala:18)
at work.Element.widen(Element.scala:31)
at work.Element.above(Element.scala:11)
at work.Element.heighten(Element.scala:39)
at work.Element.beside(Element.scala:18)
at work.Element.widen(Element.scala:31)
at work.Element.above(Element.scala:11)
at work.Element.heighten(Element.scala:39)
at work.Element.beside(Element.scala:18)
at work.Element.widen(Element.scala:31)
at work.Element.above(Element.scala:11)
at work.Element.heighten(Element.scala:39)
at work.Element.beside(Element.scala:18)
at work.Element.widen(Element.scala:31)
at work.Element.above(Element.scala:11)
at work.Element.heighten(Element.scala:39)
at work.Element.beside(Element.scala:18)
at work.Element.widen(Element.scala:31)
··················


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 0回复贴,共1页
<<返回scala吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示