为什么在主线程中收到CMException错误?

尼曼莎

这是一个允许用户输入年份并以罗马数字返回相应年份的程序。我可以编译它而没有任何错误,但是当我运行它时,它会出错。

这样运行该程序时出现错误, 在此处输入图片说明

该程序的代码是

import java.io.*;
public class RomanCal {
public static void main(String args[])throws IOException{
    int year;
    BufferedReader input = new BufferedReader(new InputStreamReader(System.in));

    System.out.print("Enter a year to convert : ");//asking for input
    year = input.read();

    start(year);
}

public static void start(int year){
    String full = Integer.toString(year);//full year is converted to a String
    String check = full.substring(0,1);

    switch (check){//checking the first number
    case "1" : System.out.println("M");
    break;
    case "2" : System.out.println("MM");
    break;
    default : System.out.println("Invalid Year");
     }

    check = full.substring(1,2);

    switch (check){//checking the second number
    case "0" : 
        check = full.substring(2,3);
        switch (check){//check the third number if second is zero
        case "0" :
            check = full.substring(3,4);
            switch (check){//check the fourth number if third is zero
            case "1" : System.out.print("I");
            break;
            case "2" : System.out.print("II");
            break;
            case "3" : System.out.print("III");
            break;
            case "4" : System.out.print("IV");
            break;
            case "5" : System.out.print("V");
            break;
            case "6" : System.out.print("VI");
            break;
            case "7" : System.out.print("VII");
            break;
            case "8" : System.out.print("VIII");
            break;
            case "9" : System.out.print("IX");
            break;
            }
            break;



        case "1" : System.out.print("X");
        break;
        case "2" : System.out.print("XX");
        break;
        case "3" : System.out.print("XXX");
        break;
        case "4" : System.out.print("XL");
        break;
        case "5" : System.out.print("L");
        break;
        case "6" : System.out.print("LX");
        break;
        case "7" : System.out.print("LXX");
        break;
        case "8" : System.out.print("LXXX");
        break;
        case "9" : System.out.print("XC");
        break;
        }
        break;



    case "1" : System.out.print("C");
    break;
    case "2" : System.out.print("CC");
    break;
    case "3" : System.out.print("CCC");
    break;
    case "4" : System.out.print("CD");
    break;
    case "5" : System.out.print("D");
    break;
    case "6" : System.out.print("DC");
    break;
    case "7" : System.out.print("DCC");
    break;
    case "8" : System.out.print("DCCC");
    break;
    case "9" : System.out.print("CM");
    break;
    }


    check = full.substring(3,4);

    switch (check){//check the fourth number
    case "1" : System.out.print("I");
    break;
    case "2" : System.out.print("II");
    break;
    case "3" : System.out.print("III");
    break;
    case "4" : System.out.print("IV");
    break;
    case "5" : System.out.print("V");
    break;
    case "6" : System.out.print("VI");
    break;
    case "7" : System.out.print("VII");
    break;
    case "8" : System.out.print("VIII");
    break;
    case "9" : System.out.print("IX");
    break;
    }





}


}
伊利亚·伯索夫(IłyaBursov)

两个主要问题:

  1. 您使用错误的方法来读取用户输入,正在读取第一个符号的ASCII码('1'= 49)
  2. 您没有break在大小写/切换中使用语句

考虑以下代码:

public static void main(final String args[]) throws java.io.IOException {
    final String[] m = {"", "M", "MM"};
    final String[] c = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
    final String[] x = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
    final String[] i = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
    try (final java.util.Scanner scanner = new java.util.Scanner(System.in)) {
        System.out.print("Enter a year to convert : ");
        final int year = scanner.nextInt();
        System.out.println(m[year / 1000] + c[(year / 100) % 10] + x[(year / 10) % 10] + i[year % 10]);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Java

为什么invokeLater的主线程中执行?

来自分类Dev

为什么任务在主线程中运行?

来自分类Dev

函数只能在主线程中调用,为什么?

来自分类Dev

为什么要在主线程上订阅?

来自分类Java

为什么ForkJoinPool ::的invoke()阻塞主线程?

来自分类Java

为什么主线程不被终止

来自分类Java

为什么工作的AsyncTask主线程?

来自分类Dev

为什么Future会阻塞主线程?

来自分类Dev

为什么从主线程调用时`std::promise::set_value` 会抛出错误?

来自分类Dev

为什么主线程还调用线程池的execute()方法?

来自分类Dev

为什么主线程等待后台线程完成

来自分类Dev

为什么在回调中线程变为主线程?

来自分类Dev

什么是Xcode中的主线程检查器

来自分类Java

为什么CompletableFuture中的断点也会停止在主线程中执行?

来自分类Java

为什么CompletableFuture中的断点也会停止在主线程中执行?

来自分类Dev

为什么只有主线程才能在Python中设置信号处理程序

来自分类Dev

为什么不在主线程(Android)中执行所有操作?

来自分类Dev

为什么我在 Python 的主线程中看不到写入到子进程中的队列?

来自分类Dev

为什么我们在异步函数中在主线程上调用完成?

来自分类Dev

保护主线程免受工作线程中的错误的影响

来自分类Java

为什么一个新的线程无法看到主线程中的事务春季JUnit测试准备测试数据?

来自分类Dev

如果 EDT 是一个单独的线程,为什么在这个例子中 invokeLater 等待主线程完成?

来自分类Dev

运行片8。为什么我收到这个错误。线程与它有什么关系?

来自分类Dev

为什么主线程没有关机方法

来自分类Java

为什么此Future的方法阻塞了主线程?

来自分类Dev

为什么主线程在这里没有被抢占?

来自分类Java

Java:为什么主线程没有进行?

来自分类Dev

Android:Volley:为什么必须从主线程调用volley imageLoader?

来自分类Dev

为什么这个订阅会阻塞主线程?

Related 相关文章

  1. 1

    为什么invokeLater的主线程中执行?

  2. 2

    为什么任务在主线程中运行?

  3. 3

    函数只能在主线程中调用,为什么?

  4. 4

    为什么要在主线程上订阅?

  5. 5

    为什么ForkJoinPool ::的invoke()阻塞主线程?

  6. 6

    为什么主线程不被终止

  7. 7

    为什么工作的AsyncTask主线程?

  8. 8

    为什么Future会阻塞主线程?

  9. 9

    为什么从主线程调用时`std::promise::set_value` 会抛出错误?

  10. 10

    为什么主线程还调用线程池的execute()方法?

  11. 11

    为什么主线程等待后台线程完成

  12. 12

    为什么在回调中线程变为主线程?

  13. 13

    什么是Xcode中的主线程检查器

  14. 14

    为什么CompletableFuture中的断点也会停止在主线程中执行?

  15. 15

    为什么CompletableFuture中的断点也会停止在主线程中执行?

  16. 16

    为什么只有主线程才能在Python中设置信号处理程序

  17. 17

    为什么不在主线程(Android)中执行所有操作?

  18. 18

    为什么我在 Python 的主线程中看不到写入到子进程中的队列?

  19. 19

    为什么我们在异步函数中在主线程上调用完成?

  20. 20

    保护主线程免受工作线程中的错误的影响

  21. 21

    为什么一个新的线程无法看到主线程中的事务春季JUnit测试准备测试数据?

  22. 22

    如果 EDT 是一个单独的线程,为什么在这个例子中 invokeLater 等待主线程完成?

  23. 23

    运行片8。为什么我收到这个错误。线程与它有什么关系?

  24. 24

    为什么主线程没有关机方法

  25. 25

    为什么此Future的方法阻塞了主线程?

  26. 26

    为什么主线程在这里没有被抢占?

  27. 27

    Java:为什么主线程没有进行?

  28. 28

    Android:Volley:为什么必须从主线程调用volley imageLoader?

  29. 29

    为什么这个订阅会阻塞主线程?

热门标签

归档