【问题标题】:The first position of my array isn't being modified我的数组的第一个位置没有被修改
【发布时间】:2018-11-14 20:56:23
【问题描述】:

我正在创建一个将 5 位邮政编码转换为框架条的应用程序。奇怪的是,输入的第一个数字没有正确地进行转换。代码如下:

import java.util.*;
import java.lang.*;
import java.io.*;
class Zip{

    public static String checkDigit(String bar)
    {
        Scanner s = new Scanner(System.in);
        int [] input;
        input = new int [4];
        for(int p = 0; p < 4; p++)
        {
            input[p] = s.nextInt();
            if (input[p] == 0)
            {
                bar = bar + "||:::";
            }
            if (input[p] == 1)
            {
                bar = bar + ":::||";
            }
        }
        System.out.println();
        return bar;
    }

    public static void main (String[] args) {   
        Scanner s = new Scanner(System.in);
        System.out.println(checkDigit(s.nextLine())); 
    }
}

例如在数组中输入1,0,0,0,0时,输出为

“1||:::||:::||:::||:::”

在数组中输入0、1、1、1、1时,输出为

"0:::||:::||:::||:::||"

它不转换 pos [0] 的第一个数字,而是直接打印数字。这是为什么呢?

【问题讨论】:

  • 因为在使用bar = bar + ...时会保留bar的初始值

标签: java arrays for-loop zipcode


【解决方案1】:

这是因为s.nextLine()它会读取第一个输入到控制台的int并将其保存在String bar传递到checkDigit()

Scanner s = new Scanner(System.in);
    System.out.println(checkDigit(s.nextLine())); 

传递一个空字符串

Scanner s = new Scanner(System.in);
    System.out.println(checkDigit("")); 

输入: 0 1 1 1

输出: ||::::::||:::||:::||

【讨论】:

    【解决方案2】:

    实际上@ddalcanto 这里没有太大问题。你的逻辑很好。只是一些小错误导致输出异常。

    1. 显示第一个输入是因为您将更新后的值附加到 bar 字符串,因为 main() 函数中的 s.nextLine() 而这只是第一个接受的字符。因此,请参见第 2 点。
    2. 无需将s.nextLine() 作为参数发送给checkDigit() 的函数调用。还要从函数定义中删除 string bar 作为参数。这就是导致您提供额外输入的原因。例如,预期 4 个输入的 5 个输入等。
    3. 您的 input[] 数组大小为 4,但您从 0 to 4 循环,这意味着 5 次获得 5 个输入,但该数组只能容纳 4 个元素。只需将数组大小更改为 5。=> input = new int[5];

    这是更新后的工作代码以及相关的输出。

    代码:

    import java.util.*;
    import java.lang.*;
    import java.io.*;
    class Zip{
    
        public static String checkDigit()
        {
            Scanner s = new Scanner(System.in);
            String bar  = "";
            int [] input;
            input = new int [5];
            for(int p = 0; p < 5; p++)
            {
                input[p] = s.nextInt();
                if (input[p] == 0)
                {
                    bar = bar + "||:::";
                }
                if (input[p] == 1)
                {
                    bar = bar + ":::||";
                }
            }
            System.out.println();
            return bar;
        }
    
        public static void main (String[] args) {   
            Scanner s = new Scanner(System.in);
            System.out.println(checkDigit()); 
        }
    }
    

    输出:

     1
     1
     1
     1
     1
    
    :::||:::||:::||:::||:::||
    

    另一个输入-输出对:

     0
     1
     1
     0
     1
    
    ||::::::||:::||||::::::||
    

    【讨论】:

      【解决方案3】:

      您正在 main() 中创建和读取 Scanner 对象,因此第一个数字进入发送到 checkDigit 方法的 bar 参数。

      我将完全删除 bar 参数并进行一些其他更改。

      public static String checkDigit() {
          StringBuilder bar = new StringBuilder();
          Scanner s = new Scanner(System.in);
          int input = 0;
          for(int p = 0; p < 5; p++) {
              input = s.nextInt();
              if (input == 0) {
                  bar.append("||:::");
              }
              if (input == 1) {
                  bar.append(":::||");
              }
          }
          return bar.toString();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-01
        • 1970-01-01
        • 2013-03-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多