下面的代码不运行完全

The following code's not running completely

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 // 用户输入

在 ser enviada 上写一个 mensagem。

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

我不明白为什么它不会 运行 整个代码,是代码有问题还是我的 eclipse 有问题?

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

解决方法是在 nextInt() 之后添加对 nextLine() 的另一个调用,如下所示:

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();

它已终止,因为当您使用扫描仪 class 进行输入时,它会将 'Enter' 作为输入。

所以当你输入14然后按'enter',所以需要两次输入。第一个是 14,第二个是空字符串。

您好,有一个小改动,您必须使用 next 而不是 nextLine。下面是必要的代码,如果您以错误的格式输入数字,您将得到一个不匹配的异常。

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();

    }
}

这是我认为发生的事情。

  • Scanner 读为“1”和“4”,return从 xis.nextInt()
  • 编辑了你 14
  • 输入中的下一个内容是换行(您在输入 14 后输入的 return)。
  • 然后您读取一行输入,它将读取 return 直到下一个新行的所有内容。在这种情况下,这是一个空字符串,也就是 xis.nextLine() returns.
  • 如果您随后阅读 另一 行,我想您可能会得到剩余的输入。

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

m = xis.nextLine();

这可能不是编写此代码的最佳方式 - 但它应该表明我上面所建议的是否真的发生了。

或者您可以使用 BufferedReader class。显示下面的代码。

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); 
        }
    }
}