有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何确定Java程序不接受7个控制台输入的原因?

我有一个应用程序,你应该输入7个整数,然后应用程序应该告诉你每个数字有多少次出现

示例:如果我有5678588,那么应该是我有两个5,一个6,一个7和三个8;是我输入的第一个数字,在这个例子中是5,然后出现7次。如何解决此问题

import java.util.Scanner;
public class U7A1_NumberCount {
public static void main(String[] args) {
    final int MAX_INPUT_LENGTH = 7;
    int[] inputArray = new int[MAX_INPUT_LENGTH];
    System.out.print("Please, enter seven integers: ");
    Scanner input = new Scanner(System.in);

    int max = 0;
    int nums = input.nextInt();
    for(int n = 0; n < MAX_INPUT_LENGTH; n++) {
        if(inputArray[n] > max) {
            max = inputArray[n];
        }
    }
    int[] count = new int[max + 1];
    for(int n = 0; n < MAX_INPUT_LENGTH; n++) {
        count[(inputArray[n])]++;
    }

    for(int n = 0; n < count.length; n++) {
        if(count[n] > 0) {
            System.out.println("The number " + nums + " occurs " + count[n] + " times.");
        }
    }
}

} 

共 (4) 个答案

  1. # 1 楼答案

    首先,如果你不理解你的代码,让它更可读。。。这就避免了很多问题,只是在一开始

    根据罗伯特·c·马丁(robert c.martin)的干净代码,试着在思考时写下代码。(https://de.wikipedia.org/wiki/Clean_Code

    下面是一个非常简化的示例,以避免使其复杂化

    import java.util.LinkedList;
    import java.util.List;
    import java.util.Scanner;
    
    public class U7A1_NumberCount {
    
    private static class NumberCount {
        public NumberCount(final int number, final int amount) {
            this.number = number;
            this.amount = amount;
        }
    
        int amount;
        int number;
    }
    
    public static void main(final String[] args) {
        final int MAX_INPUT_LENGTH = 7;
        final int[] userInput = readUserInput(MAX_INPUT_LENGTH);
        final List<NumberCount> count = getNumberCount(userInput);
        printResult(count);
    }
    
    private static NumberCount countSingleNumber(final int nr, final int[] userInput) {
        int amount = 0;
        for (int i = 0; i < userInput.length; i++) {
            if (userInput[i] == nr) {
                amount++;
            }
        }
        return new NumberCount(nr, amount);
    }
    
    private static List<NumberCount> getNumberCount(final int[] userInput) {
        final List<NumberCount> result = new LinkedList<>();
        for (int i = 0; i < userInput.length; i++) {
            final int nr = userInput[i];
            if (isNumberNotConsideredYet(result, nr)) {
                final NumberCount count = countSingleNumber(nr, userInput);
                result.add(count);
            }
        }
        return result;
    }
    
    private static int getUsersChoice(final Scanner scanner) {
        System.out.print("Please, enter a number: ");
        return scanner.nextInt();
    }
    
    private static boolean isNumberNotConsideredYet(final List<NumberCount> result, final int nr) {
        return result.stream().noneMatch(count -> count.number == nr);
    }
    
    private static void printResult(final List<NumberCount> count) {
        for (final NumberCount nr : count) {
            System.out.println("The number " + nr.number + " occurs " + nr.amount + " times.");
        }
    }
    
    private static int[] readUserInput(final int inputAmout) {
        final Scanner scanner = new Scanner(System.in);
        final int[] userInput = new int[inputAmout];
        for (int i = 0; i < userInput.length; i++) {
            userInput[i] = getUsersChoice(scanner);
        }
        scanner.close();
        return userInput;
    }
    
    }
    
  2. # 2 楼答案

    对于数字的输入,我会使用一些可以在一行上用分隔符分割许多整数的东西。基本上,如果逗号是分隔符

    Scanner scan = new Scanner(System.in);
    // some prompt here
    List<Integer> intList = Stream.of(scan.nextLine().split(','))
        .map(String::trim)
        .map(Integer::new)
        .collect(Collectors.toList());
    

    显然,更多的错误处理可能是有用的(例如,跳过无法解析为整数的内容)。您还可以将分隔符更改为非数字的任何内容

    然后我将创建一个HashBag(例如,我将在Apache Commons Collections中使用该实现),并使用包的toString打印结果

    HashBag bag = new HashBag(intList);
    System.out.println(bag.toString());
    

    或者你可以通过HashBag来获取并打印你想要的信息

    HashBag对象的实现很简单:创建一个以HashMap<Object, Integer>为背景的类,并使用某种添加方法调用Object#equals,如果为true,则增加值,如果为false,则创建一个值为1的新键

  3. # 3 楼答案

    is the first number i put in, in this case 5, and then it occurs 7 times. How do I fix this problem?

    您创建了一个数组来保存7个整数,但没有使用它。您只为另一个变量赋值:

    int nums = input.nextInt();
    

    如果要将所有7个输入输入到数组中,可以提示用户n次:

    for(int i=0; i<inputArray.length; i++)
        inputArray[i] = input.nextInt();    //requires user to press enter 7 times
    
  4. # 4 楼答案

    Java是面向对象的语言,所以使用类和对象来简化代码。我会这样做:

    public class CountNumbers {
    
        private Map<Integer,Integer> numbers = new HashMap<>();
    
        public void addNumber(Integer number){
            Integer howMany =numbers.get(number);
            if( null != howMany){
                howMany++;
            }else{
                howMany=1;
            }
            numbers.put(number,howMany);
        }
    
        public Map<Integer,Integer> getNumbers(){
            return numbers;
        }
    }
    

    public class Majn {
    
        final static int MAX_INPUT_LENGTH = 7;
    
        public static void main(String[] args) {
            CountNumbers countNumbers = new CountNumbers();
    
            System.out.print("Please, enter seven integers: ");
            Scanner input = new Scanner(System.in);
    
            for(int i = 0; i< MAX_INPUT_LENGTH; i++) {
                int nums = input.nextInt();
                countNumbers.addNumber(nums);
            }
    
            for(Integer number: countNumbers.getNumbers().keySet()){
                System.out.format("The number %d occurs %d\n", number, countNumbers.getNumbers().get(number));
            }
        }
    }