Lucky and even lucky numbers: Difference between revisions

→‎{{header|Go}}: More idiomatic error handling.
(Added Go)
(→‎{{header|Go}}: More idiomatic error handling.)
Line 202:
import (
"fmt"
"log"
"os"
"strconv"
Line 241 ⟶ 242:
}
 
func printSingle(j int, odd bool) error {
if odd {
if j >= len(luckyOdd) {
panicreturn fmt.Errorf("Argumentthe argument, %d, is too big", j)
}
fmt.Println("Lucky number", j, "=", luckyOdd[j-1])
} else {
if j >= len(luckyEven) {
panicreturn fmt.Errorf("Argumentthe argument, %d, is too big", j)
}
fmt.Println("Lucky even number", j, "=", luckyEven[j-1])
}
return nil
}
 
func printRange(j, k int, odd bool) error {
if odd {
if k >= len(luckyOdd) {
panicreturn fmt.Errorf("Argumentthe argument, %d, is too big", k)
}
fmt.Println("Lucky numbers", j, "to", k, "are:")
Line 264 ⟶ 266:
} else {
if k >= len(luckyEven) {
panicreturn fmt.Errorf("Argumentthe argument, %d, is too big", k)
}
fmt.Println("Lucky even numbers", j, "to", k, "are:")
fmt.Println(luckyEven[j-1 : k])
}
return nil
}
 
func printBetween(j, k int, odd bool) error {
var r []int
if odd {
max := luckyOdd[len(luckyOdd)-1]
if j > max || k > max {
panicreturn fmt.Errorf("Atat least one argument, %d or %d, is too big", j, k)
}
for _, num := range luckyOdd {
Line 292 ⟶ 295:
max := luckyEven[len(luckyEven)-1]
if j > max || k > max {
panicreturn fmt.Errorf("Atat least one argument, %d or %d, is too big", j, k)
}
for _, num := range luckyEven {
Line 306 ⟶ 309:
fmt.Println(r)
}
return nil
}
 
Line 311 ⟶ 315:
nargs := len(os.Args)
if nargs < 2 || nargs > 4 {
paniclog.Fatal("Therethere must be between 1 and 3 command line arguments")
}
filterLuckyOdd()
Line 317 ⟶ 321:
j, err := strconv.Atoi(os.Args[1])
if err != nil || j < 1 {
paniclog.Fatalf("Firstfirst argument, %s, must be a positive integer", os.Args[1])
}
if nargs == 2 {
if err := printSingle(j, true); err != nil {
printRangelog.Fatal(j, k, trueerr)
}
return
}
Line 327 ⟶ 333:
k, err := strconv.Atoi(os.Args[2])
if err != nil {
paniclog.Fatalf("Secondsecond argument, %s, must be an integer", os.Args[2])
}
if k >= 0 {
if j > k {
paniclog.Fatalf("Secondsecond argument, %d, can't be less than first, %d", k, j)
}
if err := printRange(j, k, oddtrue); err != nil {
log.Fatal(err)
}
printRange(j, k, true)
} else {
l := -k
if j > l {
paniclog.Fatalf("The second argument, %d, can't be less in absolute value than first, %d", k, j)
}
if err := printBetween(j, l, true); err != nil {
log.Fatal(err)
}
printBetween(j, l, true)
}
return
Line 351 ⟶ 361:
odd = false
default:
paniclog.Fatalf("Thirdthird argument, %s, is invalid", os.Args[3])
}
if os.Args[2] == "," {
if err := printSingle(j, odd); err != nil {
log.Fatal(err)
}
return
}
Line 360 ⟶ 372:
k, err := strconv.Atoi(os.Args[2])
if err != nil {
paniclog.Fatal("Secondsecond argument must be an integer or a comma")
}
if k >= 0 {
if j > k {
paniclog.Fatalf("Secondsecond argument, %d, can't be less than first, %d", k, j)
}
if err := printRange(j, k, odd); err != nil {
log.Fatal(err)
}
printRange(j, k, odd)
} else {
l := -k
if j > l {
paniclog.Fatalf("The second argument, %d, can't be less in absolute value than first, %d", k, j)
}
if err := printBetween(j, l, odd); err != nil {
log.Fatal(err)
}
printBetween(j, l, odd)
}
}</lang>
9,479

edits