Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何链接两个数组,以便从另一个数组中获取要使用的值?_Java_Arrays - Fatal编程技术网

Java 如何链接两个数组,以便从另一个数组中获取要使用的值?

Java 如何链接两个数组,以便从另一个数组中获取要使用的值?,java,arrays,Java,Arrays,我是Java初学者,这是我的软件课程。一般项目非常简单,它要求你告诉用户他们的销售税是多少,他们的新总额是基于什么,基于他们在美国的哪个州。我试图使它成为这样,当他们通过扫描仪输入时,例如,威斯康星州,在提示“你在哪个州”之后,我得到的值是.05,因为这是威斯康星州的州税 我制作了两个数组,我只是不知道如何使用另一个数组的值来访问一个数组中的值。一切都是按照正确的顺序进行的,比如阿拉巴马州的税率是4%。04,阿拉斯加的税率是0%,依此类推 import java.util.Scanner; p

我是Java初学者,这是我的软件课程。一般项目非常简单,它要求你告诉用户他们的销售税是多少,他们的新总额是基于什么,基于他们在美国的哪个州。我试图使它成为这样,当他们通过扫描仪输入时,例如,威斯康星州,在提示“你在哪个州”之后,我得到的值是.05,因为这是威斯康星州的州税

我制作了两个数组,我只是不知道如何使用另一个数组的值来访问一个数组中的值。一切都是按照正确的顺序进行的,比如阿拉巴马州的税率是4%。04,阿拉斯加的税率是0%,依此类推

import java.util.Scanner;

public class SalesTax {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        double sale;
        double salesTax;
        double total;

        double[] taxRate = { .04, 0, .56, .65, .75, 
        .29, .0635, 0, .06, .04, 
        .04, .06, .0625, .07, .06, 
        .065, .06, .04, .055, .06,
        .0625, .06, .06875, .07, .04225, 0, 
        .055, .0685, 0, .07, .05125, 
        .04, .0475, .05, .0575, .045, 
        0, .06, .07, .06, .04, 
        .07, .0625, .0595, .06, .0530, 
        .065, .06, .05, .04, .0575 };

        String[] states = { "Alabama", "Alaska", "Arizona", "Arkansas", "California", 
        "Colorado", "Connecticut", "Delaware", "Florida", "Georgia", 
        "Hawaii", "Idaho", "Illinois", "Indiana", "Iowa", 
        "Kansas", "Kentucky", "Louisiana", "Maine", "Maryland", 
        "Massachusetts", "Michigan", "Minnesota", "Mississippi", "Missouri", 
        "Montana", "Nebraska", "Nevada", "New Hampshire", "New Jersey", 
        "New Mexico", "New York", "North Carolina", "North Dakota", "Ohio", 
        "Oklahoma", "Oregon", "Pennsylvania", "Rhode Island", "South Carolina", 
        "South Dakota", "Tennessee", "Texas", "Utah", "Vermont", 
        "Virginia", "Washington", "West Virginia", "Wisconsin", "Wyoming" };

        System.out.println("Enter the state you are in (please type the full name): ");
        states = input.nextLine();

        System.out.println("Enter the amount of the sale: ");
        sale = input.nextDouble();
    }
}

我真的不知道该怎么办。一旦我能够引用该值,我就应该能够轻松地对其其余部分进行编码。如果需要更多信息,请告诉我。

您可以获取并保留所选状态的索引,然后直接使用它从金额中获取值

int index = -1;
for (int i = 0; i < states.length; i++) {
    if (states[i].equals (chosenState)) {
       index = i;
       break;
    }
}

if (index >= 0) {
   tr = taxRate[index];  // is what you want
}

但可能更好但更高级的方法是创建一个包含名称和taxRate的类,并拥有一个数组或这些对象的列表。前面的响应是正确的,但为此,您需要绝对确保两个数组始终具有相同的大小,否则将失败。 如果不确定,可以使用HashMap 从那里你可以画一张地图。普特拉巴马州,0.04;每个人都是这样。
然后,您可以在map.keySet中循环,当您找到所需的状态时,只需执行map.getstate,您真正应该使用的是类似HashMap的数据结构。它非常简单,并且建立在

使用这两个字段创建一个名为Entry的类:一个名为state的字符串字段和一个名为taxRate的double类型字段

创建另一个名为TaxRateTable的类或任何您想调用的类,该类对您有意义,并且只有一个字段,即Entry类型的对象数组,即Entry数组

您必须存储50个州的记录及其相应的税率。因此,数组大小为67。现在我们需要做的就是找到一种方法,在数组中插入一个条目,这样当我按名称查找某个条目时,当然在您的情况下,我们不使用循环导航到该位置,而是直接跳到我们要查找的条目的确切位置。 我们怎么做?这是解决方案的核心 我们创建了一个函数,它接受一个州的名称,然后输出一个0到66之间的数字(包括0到66),对于每个州的名称,它返回一个不同的数字。你能猜出我们要用这个吗? 一旦我们得到这个数字,这个数字现在将成为数组中条目的索引。 那么函数是什么样子的呢

static int calculateIndex(String name) {
int sumTotal = 0;
        for (int i = 0; i < name.length(); i++) {
            sumTotal += name.charAt(i);
        }

        return ((13*sumTotal) % 127) % 67;
}
然后创建一个名为putTaxRateEntryOfState的方法,该方法使用州名称和税率。使用参数创建一个Entry对象,用上面提到的函数找出索引,然后在Entry数组中获得的索引处将该项作为的值赋值

现在创建一个名为getTaxRateOfState的方法,该方法将状态的名称作为唯一参数。通过调用上面提到的函数calculateIndex,然后使用该索引访问您在数组中查找的确切条目,获取存储在数组中的条目的索引

解释 所使用的数据结构称为。它可以找到一个给定的元素,也可以在恒定的时间内快速插入一个元素。 如您所见,数据结构中的项没有排序

哈希表的大小意味着条目数组的总大小通常被选择为大约。这就是为什么在这种情况下它是67,这大约比50,这是要输入的值的总数

calculateIndex函数是怎么回事? 此函数称为。有许多种类的散列函数是为满足各种需求而设计的。在我们的例子中,因为我们事先知道所有数据,所以我们使用一个名为的散列函数。它主要是在所有输入事先已知的情况下使用。 其形式如下:

索引=k*x模p模n

在这个例子中,k=13,p=127都是素数

重要! 哈希函数很可能为不同的值计算相同的索引。这叫做a,这是正常的,你应该期待它。这有多种技巧


但是,如果您不想执行上述所有操作,而只是实现一个一次性解决方案,那么您可以使用Java的

,因为Java 9,Map接口具有和Map.entry,可以用于创建任意大小的不可修改的映射。这是对的,同样在循环时,如果您决定采用这种方式,我认为从Java 8开始,映射具有方法entrySet,这种方法不是通过键循环JU,而是同时循环一组键和值,这种方法不需要这样做
从keySorry中再次查找值,但通过map.keySet循环到底是什么意思?假设您正在查找税率,例如俄勒冈州:long taxRate;对于字符串键:map.keySet{if key.equalsOregon{taxRate=map.getkey;}