以下代码未完全运行

时间:2015-04-08 17:05:57

标签: java eclipse runtime-error terminate

public static void main(String[] args) {
    Scanner xis = new Scanner(System.in);
    System.out.println("Insira o deslocamento desejado.");
    int d = xis.nextInt();
    System.out.println("Digite a mensagem a ser enviada.");
    String m = xis.nextLine();
    for (int i = 0; i < m.length(); i++) 
    {

        int x = m.charAt(i) + d;
        if(x > 'Z')
        {
            System.out.println((char)(x - 26));
        }
        System.out.println((char)x); 
    }

}

控制台显示的内容:

Insira o deslocamento desejado。

14 //用户的条目

将一个系列用于服用enviada。

// 之后它说已经被终止了。

我不明白为什么它不能运行整个代码,对代码或我的日食有问题吗?

5 个答案:

答案 0 :(得分:1)

当您插入数字并按Enter键时,对xis.nextInt()的调用会消耗整数,但不会消耗下一行字符。因此,当您执行xis.nextLine()时,它会读取下一行字符并完成。

解决方法是在nextLine()之后添加另一个nextInt()来电,如下所示:

System.out.println("Insira o deslocamento desejado.");
int d = xis.nextInt();
xis.nextLine();
System.out.println("Digite a mensagem a ser enviada.");
String m = xis.nextLine();

答案 1 :(得分:1)

嗨,你必须使用下一行而不是下一行的小改动。下面是必要的代码,如果你以错误的格式输入数字,你将得到一个不匹配的例外。

import java.util.Scanner;

public class Practice_1 {
    public static void main(String[] args) {
        Scanner xis = new Scanner(System.in);
        System.out.println("Insira o deslocamento desejado.");
        int d = xis.nextInt();
        System.out.println("Digite a mensagem a ser enviada.");
        String m = xis.next();
        for (int i = 0; i < m.length(); i++) 
        {

            int x = m.charAt(i) + d;
            if(x > 'Z')
            {
                System.out.println((char)(x - 26));
            }
            System.out.println((char)x); 
        }
        xis.close();

    }
}

答案 2 :(得分:0)

它已终止,因为当您使用Scanner类进行输入时,将需要输入&#39;作为输入。

因此,当您输入14并按&#39;输入&#39;时,将需要两个输入。第一个是14,第二个是空字符串。

答案 3 :(得分:0)

这是我认为发生的事情

  • Scanner正如所读&#39; 1&#39;和&#39; 4&#39;并从xis.nextInt()
  • 返回14
  • 输入中的下一个内容是新行(输入14之后输入的返回值)。
  • 然后您读取一行输入,它将读取并返回到下一个新行的所有内容。在这种情况下,这是一个空字符串,这是xis.nextLine()返回的内容。
  • 如果您再阅读另一条行,我想您可能会得到其余的意见。

要在String m = xis.nextLine();添加后进行测试:

m = xis.nextLine();

这可能不是编码的最好方法 - 但它应该表明我上面提到的是否实际发生了什么。

答案 4 :(得分:0)

替代方案,您可以使用BufferedReader类。显示以下代码。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;

public class StringDemo {
    public static void main(String[] args) throws NumberFormatException, IOException {
        //Scanner xis = new Scanner(System.in);
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Insira o deslocamento desejado.");
        //int d = xis.nextInt();
        int d = Integer.parseInt(br.readLine());
        System.out.println("Digite a mensagem a ser enviada.");
        //String m = xis.nextLine();
         String m = br.readLine();
        for (int i = 0; i < m.length(); i++) 
        {

            int x = m.charAt(i) + d;
            if(x > 'Z')
            {
                System.out.println((char)(x - 26));
            }
            System.out.println((char)x); 
        }
    }
}