Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Groovy & Grails > Можно ли упростить код ввода с клавиатуры


Автор: platonos 1.1.2017, 21:58
Вот код:
Код

Map rim_arab = [ "I":1, "V":5, "X":10, "L":50, "C":100, "D":500, "M":1000]
[color=orange]BufferedReader br = new BufferedReader(new InputStreamReader(System.in))[/color]
Rim = "q"
while( Rim != "n") { 
print "Vvedite Rim = "
[color=orange]Rim = br.readLine()[/color]
f = Rim.replace("IV", "IIII").replace("IX", "VIIII").replace("XL", "XXXX").replace("XC", "LXXXX").replace("CD", "CCCC").replace("CM", "DCCCC")
Arab = 0
for(i in f) { Arab = Arab + rim_arab[i]}
print "Arab = "; println Arab
                   }

Код ввода взят у Шмидта и Эккеля (из их книг по Java)
Можно ли упростить ввод в "духе" Groovy...

Автор: zera 8.1.2017, 12:33
если я правильно понял вопрос, то смотреть в сторону http://docs.oracle.com/javase/7/docs/api/java/io/Console.html

Автор: platonos 26.1.2017, 03:32
Вот более пристойная реализация цикла:
Код:

Код

Map rim_arab = [ "I":1, "V":5, "X":10, "L":50, "C":100, "D":500, "M":1000]
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)) 
print "Vvedite Rim = "
Rim = br.readLine()  
while( Rim != "n") {           
f = Rim.replace("IV", "IIII").replace("IX", "VIIII").replace("XL", "XXXX").replace("XC", "LXXXX").replace("CD", "CCCC").replace("CM", "DCCCC")
Arab = 0; for(i in f) { Arab = Arab + rim_arab[i]}
print "Arab = "; println Arab
print "Vvedite Rim = "
Rim = br.readLine()
                   }

Но, то что мне действительно надо - это код осуществляющий бесконечный цикл, и выход из этого цикла по достижению истинности условия!...

Автор: platonos 4.2.2017, 16:22
Из арабских в римские:
Код

List Rim = [ "I", "V", "X", "L", "C", "D", "M"]
BufferedReader br = new BufferedReader(new InputStreamReader(System.in))
print "Vvedite Arab = "
Arab = br.readLine()
while( Arab != "n") { 
A = Arab.reverse(); i = 0; L = []
for( v in A){ x = v as Integer; iI = i*2; iV = 2*i+1; iX = 2*i+2
              switch (x){
                  case 4: r = Rim[iI] + Rim[iV]; break
                  case 9: r = Rim[iI] + Rim[iX]; break
                  case 1..3: r  = ""; for( int j = 0; j < x;  j++){ r  = r  + Rim[iI]}; break
                  case 5..8: r2 = ""; x1 = x - 5; for( int j = 0; j < x1; j++){ r2 = r2 + Rim[iI]}; r1 = Rim[iV]; r = r1 + r2; break
                  case 0: r = ""; break
                        }; ++i; L = L + r}
S = L.reverse().join(); print "Rim = "; println S
print "Vvedite Arab = "
Arab = br.readLine() }

Автор: platonos 19.2.2017, 01:59
Корректная реализация цикла:
Код

Map rim_arab = [ "I":1, "V":5, "X":10, "L":50, "C":100, "D":500, "M":1000]
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)) 
while( 1) {  
print "Vvedite Rim = "
Rim = br.readLine(); if(Rim == "n") {break}        
f = Rim.replace("IV", "IIII").replace("IX", "VIIII").replace("XL", "XXXX").replace("XC", "LXXXX").replace("CD", "CCCC").replace("CM", "DCCCC")
Arab = 0; for(i in f) { Arab = Arab + rim_arab[i]}
print "Arab = "; println Arab
                   } 
                 

Автор: platonos 3.3.2017, 03:50
Код

Map rim_arab = [ "I":1, "V":5, "X":10, "L":50, "C":100, "D":500, "M":1000]
//BufferedReader br = new BufferedReader(new InputStreamReader(System.in)) 
while( 1) { 
String Rim 
print "Vvedite Rim = "
Rim = rim_arab.readLine[]; if(Rim == "n") {break}        
f = Rim.replace("IV", "IIII").replace("IX", "VIIII").replace("XL", "XXXX").replace("XC", "LXXXX").replace("CD", "CCCC").replace("CM", "DCCCC")
Arab = 0; for(i in f) { Arab = Arab + rim_arab[i]}
print "Arab = "; println Arab }

 smile 

Автор: platonos 3.3.2017, 23:51
По поводу упрощения ввода продолжаю  smile 
а пока следующее:
Код

def rimarab(Rim) {
Map rimArab = [ "I":1, "V":5, "X":10, "L":50, "C":100, "D":500, "M":1000]
f = Rim.replace("IV", "IIII").replace("IX", "VIIII").replace("XL", "XXXX").replace("XC", "LXXXX").replace("CD", "CCCC").replace("CM", "DCCCC")
Arab = 0; for(i in f) { Arab = Arab + rimArab[i]}                 
                 }
BufferedReader br = new BufferedReader(new InputStreamReader(System.in))
while( 1) { 
print "Vvedite Rim = "
Rim = br.readLine(); if(Rim == "n") {break}
rimarab(Rim)      
print "Arab = "; println Arab 
          }

Автор: platonos 4.3.2017, 22:53
Продолжаем... smile 

Код

def Vvod () {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in))
print "Vvedite Rim = "; Rim = br.readLine()
            }
def rimarab (Rim) {
Map rimArab = [ "I":1, "V":5, "X":10, "L":50, "C":100, "D":500, "M":1000]
f = Rim.replace("IV", "IIII").replace("IX", "VIIII").replace("XL", "XXXX").replace("XC", "LXXXX").replace("CD", "CCCC").replace("CM", "DCCCC")
Arab = 0; for(i in f) { Arab = Arab + rimArab[i]}
                  }
def Vivod () { print "Arab = "; println Arab}
while (1) { 
Vvod (); if(Rim == "n") {break}
rimarab (Rim)      
Vivod ()  }

Автор: zera 7.3.2017, 12:32
еще раз отвечу на вопрос
http://www.tutorialspoint.com/java/io/console_readline.htm

Автор: platonos 8.3.2017, 09:03
Код

def Vvod () {print "Vvedite Rim = "; Rim = System.in.newReader().readLine()}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)