扫描仪字符串混乱

时间:2016-02-03 17:00:20

标签: java input

程序应该让我输入值a和字符串。虽然它允许我在字符串中输入整数,但它会输出问题,但不允许我输入任何内容。

import java.util.Scanner;

public class PrSumN {
  public static void main(String args[]) {
    System.out.println("Enter a value");
    Scanner sc = new Scanner(System.in);
    int a = sc.nextInt();
    int sum = 0;
    int pr = 1;
    System.out.println("Do you want the sum of the numbers or the products of the numbers?");
    String answer = sc.nextLine();
    //Itdoesnotletmeinputmystringatthispoint
    if (answer == "sum") {
      sum(a, sum);
    } else {
      product(a, pr);
    }
  }

  public static void sum(int a, int sum) {
    for (int i = 0; i < a; i++) {
      sum = sum + (a - i);
    }
    System.out.println("The sum of the numbers is " + sum);
  }

  public static void product(int a, int pr) {
    for (int i = 0; i < a; i++) {
      pr = pr * (a - i);
    }
  }
}

2 个答案:

答案 0 :(得分:4)

拨打int a = sc.nextInt();后,在控制台中输入一个整数,然后按Enter键。您输入的整数存储在a中,而换行符(\n)由String answer = sc.nextLine(); 读取,因此它不接受来自你的字符串。

添加此行

sc.nextLine(); // Will read the '\n' character from System.in

之后

int a = sc.nextInt();

另一种方法:您可以扫描string而不是int并通过解析a来获取int < / EM>:

try {
    int a = Integer.parseInt(sc.nextLine());
}
catch (ParseException ex) { // Catch
}

在其他(侧面)备注上,请勿使用if (answer=="sum"),而应使用

if (Object.equals (answer, "sum")

请参阅this

答案 1 :(得分:3)

这一行之后:

int a = sc.nextInt();

添加:

sc.nextLine();

您需要添加sc.nextLine()的原因是因为nextInt()不使用换行符。

或者,您可以扫描String并将其解析为相应的类型,例如:

int a = Integer.parseInt(sc.nextLine());

添加:与您的主要问题无关的内容,在比较字符串的值时,请使用.equals而不是==

我们使用==来比较身份,因此它应该是:

if (answer.equals("sum"))