我的数组的第一个位置没有被修改

时间:2018-11-14 20:56:24

标签: java arrays for-loop zipcode

我正在创建一个将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]处的第一位数字,而是直接打印数字。为什么会这样?

3 个答案:

答案 0 :(得分:1)

由于public List<string> GetCombinedParticipants(List<string> players, PlayerContainer allPlayers) { // Make a copy of the input list var results = players.ToList(); for (int i = 0; i < allPlayers.Count; i++) { var fullName = $"{allPlayers.FindName(i)} {allPlayers.FindSurname(i)}"; if (!results.Contains(fullName)) results.Add(fullName); } // Order by last name, then by first name return results .OrderBy(name => name.Substring(name.LastIndexOf(" ") + 1)) .ThenBy(name => name.Substring(0, name.LastIndexOf(" "))) .ToList(); } 的缘故,它将读取在控制台中输入的第一个int并将其保存在s.nextLine()中并传递到String bar

checkDigit()

传递一个空字符串

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

输入: 0 1 1 1

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

答案 1 :(得分:1)

@ddalcanto实际上没有什么问题。您的逻辑几乎没问题。.导致输出异常的一些小错误。

  1. 第一个输入按原样显示,因为您正在将更新后的值附加到bar字符串,因为s.nextLine()函数中的main()是第一个可接受的字符。因此,请参见第2点。
  2. 无需将s.nextLine()作为参数发送给checkDigit()的函数调用。还要从函数定义中删除string bar作为参数。这就是导致您提供额外输入的原因。例如,将5个输入用于预期的4个输入,等等。
  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

||::::::||:::||||::::::||

答案 2 :(得分:0)

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

我将完全删除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();
}