【问题标题】:reading input delimited by spaces in java在java中读取由空格分隔的输入
【发布时间】:2015-03-08 22:27:37
【问题描述】:

我正在努力解决以下问题。

问题:输入包含块的数量 n (1 ≤ n ≤ 20) 和块的权重 w1, ..., wn (整数, 1 ≤ wi ≤ 100000) 由空格分隔。输入应该来自用户。

  1. 我应该如何用空格写输入? (假设我输入的块数是 n = 5,块的权重是:2 3 55 6 33 - 因为 n=5)
  2. 我应该如何读取带有空格的输入并将其存储在某个列表或数组中?使用什么命令。

请找到我的代码:

public static void main(String[] args) {
    int b1 = 0;
    Scanner in = new Scanner(System.in);
    System.out.println("Enter no. of blocks: ");
    b1 = in.nextInt();
    if (b1<=20) {
        in.nextLine();
        int[] arr = new int[b1];
        for (int i=0; i<b1; i++) {
            System.out.println("Enter a weights of ths blocks: ");
            if (arr[i]<=100000) {
          arr[i] = in.nextInt();




            }
    }
        }

我不认为这是正确的方式,因为输入应该用空格分隔..

我正在考虑如何进行,但无法提出任何解决方案。你能帮我解决这个问题吗?谢谢。

【问题讨论】:

  • 请粘贴一些代码,说明您到目前为止所尝试的内容以及您遇到的问题。
  • 因此,如果您正在考虑如何进行,请在您的问题中提出。顺便说一句:什么样的输入?文本文件,用户输入还是什么?如果输入是文本文件,请提供它的确切示例。
  • 我粘贴了我的代码。请帮忙

标签: java inputstream java.util.scanner


【解决方案1】:
  1. 输入可以在命令行中给出为“input1 input2 input3”(权重用空格分隔)

  2. 您可以使用扫描仪读取输入。考虑下面的示例代码:

假设输入只是整数。

 Scanner scanner = new Scanner(System.in);
 int numOfBlocks = scanner.nextInt();
 int weightArray[] = new weightArray[numOfBlocks];
 for(int i=0;i<numOfBlocks;i++)
       {
        weightArray[i] = scanner.nextInt();
       }
 scanner.close();
//your logic

【讨论】:

  • 谢谢.. 这很容易理解。一个小查询,以空格为分隔符的数字怎么取?
  • nextInt() 方法将输入以空格作为分隔符。假设您的输入是“1 2 3 4”。 int x =scanner.nextInt() 存储 1,int y =scanner.nextInt() 存储 2,依此类推。
【解决方案2】:

有一种非常简单的方法可以读取由空格划定的输入:使用string.split(delimit)

String input = "this is a test";
String[] tokens = input.split(" ");

这会给你一个数组tokens,包含“this”、“is”、“a”和“test”。

然后你可以像这样转换成一个int数组:

int[] inputNumbers = new int[tokens.length];
for(int i = 0; i < tokens.length; i++) {
    inputNumbers[i] = Integer.parseInt(tokens[i]);
}

只要确保您有数字作为输入即可。

【讨论】:

  • 整数也一样吗?
  • @DevDev 看到我的编辑。您需要手动转换字符串。
  • 是的,但有不同的模式\d 是合适的。
  • @AlexK 谢谢.. 这很有帮助。也很容易。再次感谢。
【解决方案3】:

这是我的解决方案: 用户首先输入块的权重数量,然后按回车键。之后他 在一行中输入块的所有权重,由空格 (4 2 3 1) 分隔,然后按 Enter。 检查单个值是否在正确的范围内,您必须自己做。

public static void main(String[] args) {
    int b1 = 0;
    Scanner in = new Scanner(System.in);
    System.out.println("Enter no. of blocks: ");
    b1 = Integer.parseInt(in.nextLine());
    int[] arr = new int[b1];
    if ((b1 <= 20) && (1 >= 0)) {
        System.out.println("Enter all weights of the block seperated by spaces and then press enter:");
        String readLine = in.nextLine();
        String[] weights = readLine.split(" ");
        for (int i = 0; i < b1; ++i) {
            arr[i] = Integer.parseInt(weights[i]);
        }
    }
    in.close(); //don't forget to close the resource!
}

【讨论】:

  • 如果是,请接受答案。我用你的代码试过了,希望你能完全理解。
【解决方案4】:
import java.util.*;
class Test
{
    public static void main(String[] args) 
    {
        Scanner in=new Scanner(System.in);
        String s[]= in.nextLine().split(" ");

        int[] a=new int[s.length];
        for(int i =0 ;i < s.length;i++){
            a[i]= Integer.parseInt(s[i]);
        }
        for(int i=0;i<s.length;i++)
        {
            System.out.println(a[i]);
        }
    }
}

【讨论】:

  • 在回答一个 5 年前的问题且答案已被接受时,如果您能解释与现有答案相比,您的答案增加了什么内容,那么阅读您的答案的每个人都会受益。
猜你喜欢
  • 2011-11-30
  • 1970-01-01
  • 1970-01-01
  • 2012-10-17
  • 1970-01-01
  • 2018-06-01
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多