#java #arrays
#java #массивы
Вопрос:
Я создаю кассовый аппарат, в котором мне приходится использовать сканер, и у меня может быть только 5 входных сумм. Он также должен включать hst, и это только при наличии «h» после или перед суммой. Мой вопрос в том, как программа распознает, что я поставил «h» после или перед суммой? Похоже, это делается только с использованием строковой переменной, так как же мне это сделать? Мне нужно хранить входные данные в массиве, и поэтому я заставил это работать.
Мой код:
// Import scanner class
import java.util.Scanner;
// Create class and method
class Main {
public static void main(String[] args) {
// Declare the scanner object and create 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");
// Define an array double variable, set the limit to 5 inputs
double[] numbers = new double[5];
// Create a for loop to input any numbers 5 times
for (int i = 0; i < numbers.length; i ){
// Add a scanner input to let the user type out the values
numbers[i] = inp.nextDouble();
}
}
}
Комментарии:
1. «Похоже, это делается только с использованием строковой переменной, так как же мне это сделать?» Затем получите строку через nextLine() , чтобы вы могли проверить первый / последний символ на ‘h’. После извлечения числовой части используйте
parseDouble
для преобразования ее в числовой тип данных. Вас уже научили методам обработки строк?2. Да, я был
3. Хорошо, итак, после использования кода, подобного Hades, опубликованного ниже, вам понадобится String.substring() , чтобы получить только числовую часть, чтобы вы могли передать ее
parseDouble()
.4. Могу я спросить, что такое «hst»?
5. «arrayIndex» — это просто переменная … точно такая же, как «i» в вашем исходном сообщении. «arrayasList» используется только для отображения содержимого массива. Вы бы не использовали это в своей окончательной программе…
Ответ №1:
приведенный ниже код запрашивает ввод пользователя 5 раз, и в массиве будут только допустимые значения, значения Vald — это значения с ‘h’ в начале или конце и должны встречаться только один раз. т. е. значение ‘h’ в конце и начале или более одного раза недопустимо.
public static void main(String[] args) throws ParseException {
int counter = 1;
Double[] result = new Double[5];
int index = 0;
while(counter <= 5) {
Scanner scanner = new Scanner(System.in);
System.out.print("Enter an Amount ");
String value = scanner.nextLine();
int indexOfH = value.indexOf("h");
int lastIndexOfH = value.lastIndexOf("h");
boolean containsHatstartsOrEnd = indexOfH == 0 || indexOfH == (value.length()-1);
if(containsHatstartsOrEnd amp;amp; indexOfH==lastIndexOfH){ //Validate h at begins or end and should contains only once
result[index] = Double.parseDouble(value.replace("h", ""));
index ;
}
counter ;
}
System.out.println("Printing Valid values");
for(int i=0; i< result.length; i ) {
if(result[i]!=null) {
System.out.println(result[i]);
}
}
}
ввод и результат
Enter an Amount 13.45h
Enter an Amount 55h.65
Enter an Amount 32h.33h
Enter an Amount h100.23
Enter an Amount h20
Printing Valid values
13.45
100.23
20.0
Комментарии:
1. Мне нужно сохранить входные данные в массиве
2. @User234 Затем сделайте это. Оберните код под экземпляром сканера в цикл, чтобы получить несколько значений, а затем поместите извлеченные значения в массив.
3. Обратите внимание на тонкую разницу в объявлениях ваших массивов. В оригинале
double
для создания массива ПРИМИТИВНЫХ двойников использовались строчные буквы. Код Hades использует верхний регистрDouble
для создания массива двойных оболочек. В примере внизу 2-й и 3-й входные данные недопустимы (нет «h» в начале или конце), поэтому в массив в этих позициях не было введено никакого значения. Для этих индексов anull
будет присутствовать в массиве, посколькуDouble
является ССЫЛОЧНЫМ типом. Это различие трудно понять большинству новичков…4. @Idle_Mind да!! У вас орлиный глаз и спасибо за объяснение 1 за объяснение osam 🙂