Diskuze: Java program s využitím pole
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 8 zpráv z 8.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Předně kód zadávej pomocí tlačítka </> na horní liště.
Vypadat by to mohlo třeba nějak takto:
// Načti číslo rovnou jako text
Scanner sc = new Scanner(System.in);
System.out.print("Zadej číslo: ");
String vstup = sc.nextLine();
// Vytvoření pole pro jednotlivé znaky a jeho naplnění
String[] cisla = new String[vstup.length()];
for (int i = 0; i < vstup.length(); i++)
cisla[i] = vstup.substring(i, i + 1);
// Výpis pole znaků
for (String cislo : cisla)
System.out.print(cislo + ",");
Ahoj priamo zo Stringu to môžeš vytiahnuť najľahšie, do kódu som dal
vysvetlenie a jednotlivé metódy hovoria sami za seba, keď tak sa pýtaj
public static void main(String[] args) {
int[] resultArray;
String inputNumber;
Scanner sc = new Scanner(System.in);
System.out.print("Zadej číslo: ");
//nacitam cislo ako String
//do pola mas dat len cifry tak zapornej hotnoty sa mozes zbavit
inputNumber = String.valueOf(Math.abs(Integer.parseInt(sc.nextLine())))
//ked uz poznam vstupne cislo mozem alokovat pole na zaklade dlzky cisla
resultArray = new int[inputNumber.length()];
//zacnem prechadzat jednotlive cifry (pismena)
for(int i = 0; i < resultArray.length; i++){
resultArray[i] = Character.getNumericValue(inputNumber.charAt(i));
//alebo
//resultArray[i] = Integer.parseInt(String.valueOf(inputNumber.charAt(i)));
}
System.out.println(Arrays.toString(resultArray));
}
Vídím však, že ty chceš načítať rovno číslo a potom cez delenie dostať jednotlivé cifry. Ideš na to celkom fajn len treba modulom 10 získať cifru a potom vydelením 10 zmenšiť dané číslo o jeden rád.
public static void main(String[] args) {
int[] resultArray;
int inputNumber;
Scanner sc = new Scanner(System.in);
System.out.print("Zadej číslo: ");
//do pola mas dat len cifry tak zapornej hotnoty sa mozes zbavit
inputNumber = Math.abs(Integer.parseInt(sc.nextLine()));
//ked uz poznam vstupne cislo mozem alokovat pole na zaklade poctu cifier cisla
resultArray = new int[getCountOfDigitsOfNumber(inputNumber)];
//alebo
//resultArray = new int[String.valueOf(inputNumber).length()];
//ked uz poznam pocet cifier tak mozem pouzit for cyklus
//obratis cyklus nech mas cifry tak ako su v poradi v cisle
for(int i = resultArray.length - 1; i >= 0; i--){
resultArray[i] = inputNumber % 10; //ziskam cifru
inputNumber = inputNumber / 10; //zmensim cislo o jeden rad
}
System.out.println(Arrays.toString(resultArray));
}
/**
*
* @param number to get count of digits
* @return count of digits in input number
*/
private static int getCountOfDigitsOfNumber(int number){
int digitCount = 0;
int tmpNumber;
while(true){
digitCount++;
tmpNumber = number / 10;
if(tmpNumber == 0){
break;
}
number = tmpNumber;
}
return digitCount;
}
Ahoj, jenom pro zajímavost, ta tvoje první verze se dá napsat na 3 řádky:
public static void main(String[] args) {
try (Scanner scanner = new Scanner(System.in)) {
// načtu číslo
final String s = Long.toString(Math.round(Double.parseDouble(scanner.nextLine())));
// největší magii tu udělá metoda split, která přijímá jako parametr prázdný řetězec
System.out.println(Arrays.toString(s.split("")));
}
}
Rozmýšľal som či pôjde tak ten split použiť a zabudol som skúsiť
Mohol si dať to parsovanie
a vypisovanie rovno do jedného riadku
Chcel som to podľa zadania
napasovať do int pola
int[] ints = Arrays.stream(String.valueOf(Math.abs(Integer.parseInt(scanner.nextLine()))).split("")).mapToInt(Integer::parseInt).toArray();
To umím taky, napsat to na jeden řádek!
Scanner sc = new Scanner(System.in); System.out.print("Zadej číslo: "); String vstup = sc.nextLine(); String[] cisla = new String[vstup.length()]; for (int i = 0; i < vstup.length(); i++) cisla[i] = vstup.substring(i, i + 1); for (String cislo : cisla) System.out.print(cislo + ",");
A nebylo by jednodušší tohle? (a máš to také na 3 řádky)
String text = new Scanner(System.in, "UTF-8").nextLine();
String[] result = text.matches("\\d+") ? text.split("") : null;
System.out.println(Arrays.toString(result));
Tak řešení bys sice možná měl, ale mě popravdě hodně zaráží ten
tvůj "výtvor".
Prosím tě, na které škole učí takhle programovat? To je katastrofa na
každém řádku...
Bez urážky, ale jde vidět, že nechápeš smysl pole, nechápeš cykly a
hlavně je šílenství jak to zapisuješ.
Třeba hned ten začátek - nejdřív si deklaruješ pole, ve kterém
provoláváš neexistující proměnnou, kterou si deklaruješ o řádek
níž.
Buď vás to "učitel" nutí psát v texťáku, nebo nechápeš, co to znamená,
když ti IDE podtrhne příkaz, ale vždyť takhle jak to máš, tak ti musí
každé IDEčko minimálně podtrhnout hned první řádek, protože
vytváříš pole o velikosti neexistující proměnné x.
Další na co koukám, tak ty tvoje cykly. For ve whilu ve foru, kde první for je závislý na whilu.
Potom tady tohle:
String[] cislo = {};
Char[] cislo = number.toCharArray();
Vždyť ti opět musí IDEčko křičet, že se jednak snažíš použít stejnojmennou proměnnou a hlavně že používáš nějakou proměnnou number, která neexistuje.
Pak se snažíš dělit ta čísla jenom deseti (také netuším proč, když v zadání nic takového nemáš)
Jako je to paskvil a slátanina náhodně použitých příkazů na různých místech a naprosto nedává smysl jediný řádek. Možná tak ty dva - pro scanner a výpis textu.
Buď si projdi zdejší tutoriály, vykašli se na to, co ti říká ten "taky učitel" a nebo si domluv někoho, kdo tě to doučí (jestli chceš, rád ti s tím pomůžu), každopádně toto jsou naprosto šílené nedostatky a přiznám se, že jsem za celý život nikdy neviděl takovou hrůzu, co jsi tu předvedl.
Zobrazeno 8 zpráv z 8.