java - 如何在java中检查1是质数并且Hashmap的输出对于String类型是错误的

标签 java string hashmap primes

我目前正在解决this problem在 Hackerrank 上,下面是我迄今为止编写的代码。

当我运行它时,有几个错误:即使输入和过程正确,输出也是完全错误的,并且当输入为1时,它不会将其添加到我的 HashMap 中。我相信这两个错误都是由于使用HashMap而存在的。例如,如果输入是

3(testcases) ==> 12, 5, 7。它将打印出 Prime, Prime, Not prime,而不是正确的输出,如 Not prime, Prime, Prime。

有关更多信息,我注释掉了这些行,说“输出目的”。你可以看到,它以正确的顺序添加到 HashMap 中,但是当它打印时,它搞砸了。

所以,我只是好奇是否有人可以解释为什么打印错误,并修复输入为 1 时的部分。

import java.io.*;
import java.util.*;

public class Solution1 {

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    int[] myarray = new int[n]; // read number of testcases

    for(int i=0;i<n;i++){ // add input to my int array
        myarray[i]=sc.nextInt();
    }

    HashMap<Integer, String> newmap = new HashMap <>(); // create empty hashmap
    int temp;
    int value;
    for(int i=0;i<n;i++){   // loop based on num of testcases
        temp =myarray[i];
        boolean isprime = true; 
        if(temp ==1){   // hardcode for input 1
            isprime = false;
            continue;
        }
        for(int j=2;j<=temp/2;j++){     // checking whether the input is prime or not
            value = temp%j;
            if(value==0){
                isprime = false;
                continue;
            }
        }
        if(isprime==true){  
            //System.out.println("temp(Prime): "+temp); //output purpose
            newmap.put(temp,"Prime");
        }
        else{
            //System.out.println("temp(Not prime): "+temp); //output purpose
            newmap.put(temp,"Not prime");
        }
    }

  Set set = newmap.entrySet();
  Iterator iterator = set.iterator();
  //printing out values of the each element in hashmap(newmap)
  while(iterator.hasNext()) {
     Map.Entry mentry = (Map.Entry)iterator.next();
     System.out.println(mentry.getValue());
    }


   }
}

最佳答案

代码中的问题是您的 myarray 未排序,并且当您插入 newmap 时,它没有按所需的顺序插入。

我建议您对数组进行排序并使用有序映射,例如 LinkedHashMap 或链表。

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    int[] myarray = new int[n]; // read number of testcases

    Arrays.sort(myarray);

    for (int i = 0; i < n; i++) { // add input to my int array
        myarray[i] = sc.nextInt();
    }

    HashMap<Integer, String> newmap = new LinkedHashMap<Integer, String>(); // create
                                                                            // empty
                                                                            // hashmap
    int temp;
    int value;
    for (int i = 0; i < n; i++) { // loop based on num of testcases
        temp = myarray[i];
        boolean isprime = true;
        if (temp == 1) { // hardcode for input 1
            isprime = false;
            break;
        }
        for (int j = 2; j <= temp / 2; j++) { // checking whether the input
                                                // is prime or not
            value = temp % j;
            if (value == 0) {
                isprime = false;
                break;
            }
        }
        if (isprime == true) {
            // System.out.println("temp(Prime): "+temp); //output purpose
            newmap.put(temp, "Prime");
        } else {
            // System.out.println("temp(Not prime): "+temp); //output
            // purpose
            newmap.put(temp, "Not prime");
        }
    }

    Set set = newmap.entrySet();
    Iterator iterator = set.iterator();
    // printing out values of the each element in hashmap(newmap)
    while (iterator.hasNext()) {
        Map.Entry mentry = (Map.Entry) iterator.next();
        System.out.println(mentry.getValue());
    }

}

}

关于java - 如何在java中检查1是质数并且Hashmap的输出对于String类型是错误的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37903323/

相关文章:

java - 为什么 java/javascript/python 强制在方法名称后使用 (),即使它不带参数?

java - Tomcat 即服务与 64 位 Windows 控制台上的 Tomcat

可以索引并保存两个值的Java数据结构

java - 当尝试查找字符串中的第一个非重复字符时,方法始终返回 null

Java 并发和 Add-Only HashMap

java - 更改 proMIDI 库上的 MIDI channel

.net - 反转十六进制数字的顺序

bash - 如何替换 Bash shell 中的点?

php - mysql_real_escape_string 无法转义特殊字符,因为文本来自文本编辑器

java - "export as runnable JAR"选项丢失