英文:
How to store values in a new array by using replace method?
问题
我想在数组中存储非 "h" 值。所以为了给你提供背景,我需要制作一个基本的现金注册器,它接受一个包含价格的数组中的5个项目。然而,一些项目将包括HST(税)。为了知道哪些项目有税,哪些没有。用户将在输入金额之前或之后按下 "h" 或 "H"。我已经将带有HST的值存储在数组中,但是如何存储非HST的值呢?
注意:我尝试过像处理我的 "h" 值一样处理它们,但是不起作用,所以我很困惑。
我不能使用Arrayslist或任何其他数组方法。
示例输入:
4.565H
H2.3435
4.565h
5.234
5.6576h
示例输出:
HST 值:
4.565
2.3435
4.565
5.6576
非 HST 值:
5.234
这是我尝试过的,但不起作用:
// 导入扫描器类
import java.util.Scanner;
// 创建类和方法
class Main {
public static void main(String[] args) {
// 创建扫描器对象并设置扫描器变量
Scanner inp = new Scanner(System.in);
System.out.println("按任意键开始");
String key = inp.nextLine();
System.out.println("\n输入每个项目的金额");
System.out.println("最多允许输入5个!\n");
// 初始化计数器和索引变量以在while循环中使用
int counter = 0;
int index = 0;
int index2 = 0;
// 创建一个双精度数组变量,并将限制设置为5
Double[] numbers = new Double[5];
Double[] numbers2 = new Double[5];
// 创建一个布尔变量以在while循环中使用
boolean go = true;
while (go) {
String value = inp.nextLine();
value = value.toLowerCase();
// 设置索引值为 "h" 或 "H"
int indexOfh = value.indexOf('h');
boolean containsh = indexOfh == 0 || indexOfh == (value.length() - 1);
if (containsh) { // 验证是否以"h"开头或结尾
numbers[index] = Double.parseDouble(value.replace("h", ""));
index++;
System.out.println("此值将考虑HST");
} else {
numbers2[index2] = Double.parseDouble(value.replace("", "")); // value.replace 是一个问题
}
counter++;
if (counter == 5) {
go = false;
}
}
System.out.println("\nHST 值:");
for (int i = 0; i < numbers.length; i++) {
// 如果值缺失,打印HST值
if (numbers[i] != null) {
System.out.println(numbers[i]);
}
}
System.out.println("\n非 HST 值:");
for (int x = 0; x < numbers2.length; x++) {
if (numbers2[x] != null) {
System.out.println(numbers2[x]);
}
}
}
}
英文:
I want to store non "h" values in an array. So to give you a background, I need to make a basic cash register that accepts 5 items in an array with a price on them. Nevertheless, some items will have HST(tax) included with them. To know which items have tax and which don't. The user will press h or H before or after entering the dollar amount. I have stored the values with the HST in an array, but how would I store the non-HST values?
NOTE: I tried doing it as the same as my "h" values, but it would not work that's why I am confused
I cannot use Arrayslist or any other array methods
Sample input:
4.565H
H2.3435
4.565h
5.234
5.6576h
Sample Output:
HST Values:
4.565
2.3435
4.565
5.6576
Non-HST Values
5.234
This is What I tried But it won't work:
// Import scanner class
import java.util.Scanner;
// Create class and method
class Main {
public static void main(String[] args) {
// Create scanner object and set scanner variables
Scanner inp = new Scanner(System.in);
System.out.println("Press any key to start");
String key = inp.nextLine();
System.out.println("\nEnter the amount of each item");
System.out.println("Upto 5 inputs are allowed!\n");
// Initialize counter and index variables to use it in the while loop
int counter = 0;
int index = 0;
int index2 = 0;
// Create a double array variable, and set the limit to 5
Double[] numbers = new Double[5];
Double[] numbers2 = new Double[5];
// Create a boolean variable to use it in the while loop
boolean go = true;
while (go) {
String value = inp.nextLine();
value = value.toLowerCase();
// Set the index value to "h" or "H"
int indexOfh = value.indexOf('h');
boolean containsh = indexOfh == 0 || indexOfh == (value.length() - 1);
if (containsh) { // Validate h at beginning or end
numbers[index] = Double.parseDouble(value.replace("h", ""));
index++;
System.out.println("HST will be taken account for this value");
}else{
numbers2[index2] = Double.parseDouble(value.replace("","")); // value.replace is an issue
}
counter++;
if (counter == 5) {
go = false;
}
}
System.out.println("\nHST Values:");
for (int i = 0; i < numbers.length; i++) {
// If there is any absence of values, print the HST values
if (numbers[i] != null) {
System.out.println(numbers[i]);
}
}
System.out.println("\nNon-HST Values:");
for (int x = 0; x < numbers2.length; x++){
if (numbers2[x] != null){
System.out.println(numbers2[x]);
}
}
}
}
答案1
得分: 1
试一下这个:
我更改的部分:
1)numbers2[index2] = Double.parseDouble(value);
// 这里不需要做任何替换
2)index2++
,我注意到你在增加 index
,但是没有增加 index2
3)当你打印 HST 和非-HST 值时,你不需要遍历到 numbers.length
或者 numbers2.length
,因为你知道 index
和 index2
的值,你已经知道每个数组中的值。
如果你按照这种方式做,那么在打印时就不需要进行空值检查。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// 创建扫描器对象并设置扫描器变量
Scanner inp = new Scanner(System.in);
System.out.println("按任意键开始");
String key = inp.nextLine();
System.out.println("\n输入每个项目的金额");
System.out.println("最多允许输入 5 个!\n");
int counter = 0;
int index = 0;
int index2 = 0;
Double[] numbers = new Double[5];
Double[] numbers2 = new Double[5];
boolean go = true;
while (go) {
String value = inp.nextLine();
value = value.toLowerCase();
// 将索引值设置为 "h" 或 "H"
int indexOfh = value.indexOf('h');
boolean containsh = indexOfh == 0 || indexOfh == (value.length() - 1);
if (containsh) { // 验证是否以 h 开头或结尾
numbers[index] = Double.parseDouble(value.replace("h", ""));
index++;
System.out.println("此值将计入 HST");
} else {
numbers2[index2] = Double.parseDouble(value); // 在这里进行了更改
index2++; // 添加了这一行
}
counter++;
if (counter == 5) {
go = false;
}
}
System.out.println("\nHST 值:");
for (int i = 0; i < index; i++) { // 在这里进行了更改
// 现在不需要进行空值检查
System.out.println(numbers[i]);
}
System.out.println("\n非-HST 值:");
for (int x = 0; x < index2; x++) { // 在这里进行了更改
// 现在不需要进行空值检查
System.out.println(numbers2[x]);
}
}
}
英文:
Try this:
Things I changed:
-
numbers2[index2] = Double.parseDouble(value);
// no need to replace anything here -
index2++
, I see you incrementindex
but notindex2
-
When you print HST and non-HST value, you do not need to go till
numbers.length
ornumbers2.length
, because you know the values ofindex
andindex2
, you already know the values in each array.
If you do this way then you do not need to do null check when you are printing.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// Create scanner object and set scanner variables
Scanner inp = new Scanner(System.in);
System.out.println("Press any key to start");
String key = inp.nextLine();
System.out.println("\nEnter the amount of each item");
System.out.println("Upto 5 inputs are allowed!\n");
int counter = 0;
int index = 0;
int index2 = 0;
Double[] numbers = new Double[5];
Double[] numbers2 = new Double[5];
boolean go = true;
while (go) {
String value = inp.nextLine();
value = value.toLowerCase();
// Set the index value to "h" or "H"
int indexOfh = value.indexOf('h');
boolean containsh = indexOfh == 0 || indexOfh == (value.length() - 1);
if (containsh) { // Validate h at beginning or end
numbers[index] = Double.parseDouble(value.replace("h", ""));
index++;
System.out.println("HST will be taken account for this value");
} else {
numbers2[index2] = Double.parseDouble(value); // changed here
index2++; //added this line
}
counter++;
if (counter == 5) {
go = false;
}
}
System.out.println("\nHST Values:");
for (int i = 0; i < index; i++) { // changed here
// no need to do null check now
System.out.println(numbers[i]);
}
System.out.println("\nNon-HST Values:");
for (int x = 0; x < index2; x++) { // changed here
// no need to do null check now
System.out.println(numbers2[x]);
}
} }
答案2
得分: 0
无法返回完整的翻译,因为您的代码部分包含了许多技术性的术语和特定编程语言的元素,需要一定的上下文才能正确地翻译。如果您有特定的翻译需求,可以提供一些具体的指示,我会根据您的指示进行翻译。
英文:
The issue with the failed parsing of non-HST values is generally resolved in @Anon's answer above, however there are some other points to make code cleaner:
- provide a constant instead of hardcoded length of arrays
5
- remove redundant messages
- improve logic, rename variables and remove redundant ones
- improve handling of errors in user's input
- use String
matches
method with a case-insensitive regexp to check if the item is HST or not
public static void main(String[] args) {
final int SIZE = 5;
// Create a double array variable, and set the limit
double[] hstItems = new double[SIZE];
double[] nonHstItems = new double[SIZE];
// Create scanner object and set scanner variables
Scanner inp = new Scanner(System.in);
System.out.printf("Enter up to %d HST or non-HST items%n", SIZE);
// Initialize counter and index variables to use it in the while loop
int counter = 0;
int hstCount = 0;
int nonHstCount = 0;
while (counter++ < SIZE) {
String value = inp.nextLine();
try {
if (value.matches("(?i)(h.+|.+h)")) {
hstItems[hstCount++] = Double.parseDouble(value.replaceAll("(?i)h", ""));
System.out.println("HST will be taken into account for this value");
} else {
nonHstItems[nonHstCount++] = Double.parseDouble(value);
System.out.println("No HST is taken into account for this value");
}
} catch (Exception ex) {
System.out.printf("Failed to parse value: %s, error: %s, please try again%n", value, ex.getMessage());
counter--;
}
}
System.out.println("\nHST Values:");
for (int i = 0; i < hstCount; i++) {
System.out.println(hstItems[i]);
}
System.out.println("\nNon-HST Values:");
for (int i = 0; i < nonHstCount; i++) {
System.out.println(nonHstItems[i]);
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论