#13 ondřej
Hodnoty řádku můžeš postupně vypsat pomocí write a na konci vypsat odřádkování pomocí writeln, tak jak jsem to udělal v té první ukázce.
Příspěvky odeslané z IP adresy 213.211.51.–
A je to potřeba udělat u obou těch cyklů.
A pak tu proceduru volej jen jednou. Když ji spustíš podruhé, tak se ti znova spočítá součet a přičte se k původnímu výsledku (to by šlo opravit tím, že prostě r a s nejdříve vynuluješ), ale hlavně se ti vygeneruje nová matice a spočítá jiný součet.
Takhle to bude fungovat (příkaz pro for bude ten begin...end), ale za begin nemusíš mít ten středník. To zase bude prázdný příkaz (který ale tady nevadí). Prostě jen z toho původního kódu umaž ten středník. Teď je to jako bys to měl takhle:
for i:=1 to m do
for j:=1 to n do
begin
; // zbtecny prazdny prikaz
a[i,j]:=random(99)+1;
end;
za tím for...do umaž ten středník. Takhle ten středník (prázdný příkaz) znamená příkaz, který se v tom cyklu má dělat (takže to nedělá nic) a ten blok begin...end za ním se provede až potom a jen jednou.
randomize vyhoď před ten cyklus, jinak ti random bude vracet pořád stejnou hodnotu.
a nakonec v hlavním programu musíš tu svoji proceduru spustit (...readln...; radek; ...writeln...)
Ve Free Pascalu by to mělo fungovat. Ta úloha nejspíš vychází z toho, co bys měl znát, takže toto asi není potřeba vysvětlovat a jen si to podle potřeby upravíš. Když napíšeš, co konkrétně nevíš nebo nechápeš, tak dostaneš konkrétní radu.
Náhodné číslo můžeš získat funkcí random a lichost čísla zjistit funkcí odd (nebo i tím operátorem mod atd.)
A co konkrétně nevíš? Matice bude asi dvourozměrné pole. Projdeš jeho prvky a posčítáš je podle toho na jakém jsi řádku. Nenapsal jsi o jaký Pascal jde, ale toto by mělo na rozjezd stačit:
var
a: array of array of integer;
m, n: integer;
i, j: integer;
begin
m := 15;
n := 15;
setlength(a, m, n);
for i:=0 to m-1 do
begin
for j:=0 to n-1 do
begin
a[i,j]:= (i * n + j) mod 99 + 1;
write(a[i,j]:3);
end;
writeln;
end;
end.
Nevím, jestli to k jde nějak spočítat, ale určitě ho jde najít. Když za něj dosadíš nějakou hodnotu a výsledek nesedí, tak aspoň poznáš, jestli by mělo být větší, nebo menší. Půlením intervalu ho tak s omezenou přesností můžeš poměrně rychle najít.
Tady jsem to někomu pro jednodušší funkci ukazoval v Pythonu.
Teď koukám, že to vlastně už peter napsal.
První věc je ten vygenerovaný kód. Pokud je druhý parametr string, tak by měl být uzavřený v apostrofech nebo uvozovkách, vnitřní uvozovky a speciální znaky escapnuté, apod. podle syntaxe JS. Celé je to atribut v HTML, takže zase podle toho kódovat.
A pak ta funkce pro odesílání. Data v URL se zase nějakým způsobem kódují, nemůžeš to tam jen tak frknout.
Celkově se to takhle nedělá. Na odesílání dat jsou formuláře.
Do POSTu to můžeš dát, ale jde o to, že všechna data jsou editovatelná a na straně serveru je vždycky musíš nějak zkontrolovat.
A když už tam máš nějaký systém práv, podle kterého určuješ záznamy k zobrazení, tak musí jít stejně zkontrolovat jestli uživatel chce mazat něco mimo to, co může.
Netuším, jak máš ta práva řešená, ale je nesmysl, že by bylo složité před operací zkontrolovat, jestli ji uživatel smí provést.
Taky bacha na to, že v tom id může být mimo id cizího záznamu i cokoliv jiného, co úplně změní ten sql příkaz. To se dnes řeší pomocí prepared statements.
$stmt = $mysqli->prepare("DELETE FROM zavady WHERE id = ?");
$stmt->bind_param('i', $id);
$stmt->execute();
Nemyslím si, že byste dostali úkol na něco, co jste neprobírali. Pravděpodobně budeš mít v poznámkách něco takového:
void spocitej(int **matice, int m, int n, int *vysledek)
{
int soucet = 0;
for (int i = 0; i < m; ++i)
for (int j = 0; j < n; ++j)
soucet += matice[i][j];
*vysledek = soucet;
}
Jestli je to něco podle user agenta, tak W10 jsou NT 10.0.
Windows 11 pokud vím nejsou a nebudou.
recvBufString = std::string(recvBuf, iResult);
temp_calibrated se ti někde aktualizuje?
#1 hlucheucho
INFORMATION_SCHEMA PARAMETERS Table
Dokud je druhý znak stringu nenulový, tak je string delší než 1 znak. (Za předpokladu, že se něco načetlo. Kontrolu chyb jsem vynechal.)
To pole má 100 znaků, 99 ve scanfu znamená, že se má načíst maximálně 99 znaků (+ ukončovací nula).
char cislo[100];
scanf("%99s", cislo);
while (cislo[1]) {
unsigned soucet = 0;
for (int i = 0; cislo[i]; i++)
soucet += cislo[i] - '0';
sprintf(cislo, "%u", soucet);
}
printf("%s\n", cislo);
Hlásí to chybnou syntaxi poblíž '20'. To bude toto:
DESC LIMIT , 20
Zdá se, že to produkuješ tady:
ORDER BY " . $order_field . " " . $order_type . " LIMIT " . $start . ", " . $limit);
Proměnná $start je asi prázdná.
Původní teplota toho těla je 37 stupňu, aktuální 30 a teplota okolí 20. Hlavně, že sis ten vzorec tak pěkně našel.
Ten chleba bude mít 30 stupňů po hodině, jak už Kit napsal.
<?php
$datafile = 'data.txt';
if (isset($_POST['index']) && is_array($_POST['index'])) {
$radky = file($datafile);
foreach ($_POST['index'] as $hodnota) {
$radky[$hodnota] = '';
}
$text = join('', $radky);
file_put_contents($datafile, $text);
}
$radky = file($datafile);
$lines = count($radky);
echo "Počet řádků v souboru: $lines<br/>\n";
echo "<form method=\"post\">\n";
echo "<table>\n";
for ($i = 0; $i < count($radky); $i++) {
$row = explode("|", $radky[$i]);
echo "<tr>\n";
echo "<td><input type=\"checkbox\" name=\"index[]\" value=\"", $i, "\"/></td>\n";
echo "<td>", ($i + 1), ".</td>\n";
echo "<td>", trim($row[0]), "</td>\n";
echo "<td><a href=\"mailto:", trim($row[1]), "\">", trim($row[1]), "</a></td>\n";
echo "<td>", trim($row[2]), "</td>\n";
echo "<td>", trim($row[3]), "</td>\n";
echo "<td>", trim($row[4]), "</td>\n";
echo "<td>", trim($row[5]), "</td>\n";
echo "<td>", trim($row[6]), "</td>\n";
echo "<td>", trim($row[7]), "</td>\n";
echo "<td>", trim($row[8]), "</td>\n";
echo "<td>", trim($row[9]), "</td>\n";
echo "</tr>\n";
}
echo "</table>\n";
echo "<input type=\"submit\" name=\"sub\" value=\"Smazat označené\"></input>\n";
echo "</form>\n";
?>
Tak vyházej všechny ty kraviny, kterým nerozumíš a pak si dej na každý druhý řádek informační echo a podívej se co to dělá.
Podle mě to nefunguje vůbec, protože tam máš $file_put_contents s dolarem.
Ano.
Vždyť už tam používáš funkci pro zjištění všech kolidujících itemů i funkci pro zjištění, jestli dva itemy kolidují. V čem je problém?
for (int i = 0; i < meteory.length(); ++i) {
for (int j = 0; j < naboj.length(); ++j) {
if (meteory[i]->collidesWithItem(naboj[j])) {
// bum
}
}
}
class Node
{
public $data = '';
public $children = [];
}
$nodes = [];
$root = $nodes[0] = new Node();
foreach ($arr as $a) {
list($id, $level, $pid, $data) = $a;
if (!isset($nodes[$id])) $nodes[$id] = new Node();
if (!isset($nodes[$pid])) $nodes[$pid] = new Node();
$node = $nodes[$id];
$node->data = $data;
$parent = $nodes[$pid];
$parent->children[] = $node;
}
function rdump($nodes) {
foreach ($nodes as $node) {
echo $node->data . "\n";
rdump($node->children);
}
}
rdump($root->children);
Ale to asi nebude to, co chceš. Tak ukaž, jak to překresluješ.
Tak to máš úplně blbě.
Zpráva pro překreslení je WM_PAINT. Při "owner draw" dělá překreslení owner při WM_DRAWITEM. Button sám umí zobrazit bitmapu i text. BM_SETIMAGE
Třeba Wiresharkem.
Mícháš odsazování mezerami a tabulátory. Prostě to odsazení umaž a udělej ho znova.
Jestli tvůj editor umožňuje automaticky sjednotit a/nebo zobrazit způsob odsazení, tak to doporučuji zapnout.
Do 64 bitového ukazatale se 44 bitová adresa samozřejmě vejde.
Procesy jsou od sebe izolované, k paměti jiného procesu nemůžeš přistupovat přímo. Ve Windows můžeš použít ReadProcessMemory.
Já mám už dlouho strašný fofr, tak jsem neodepisoval, dokud nemám co :)
#1 Fastmancz
WebClient.DownloadData
Nepokoušel ses třeba napsat súbor a teď tam máš nějaký neviditelný nesmysl?
Výpisem do stránky jsem myslel vkládání XML do HTML, takže prohlížeč pak neví, co s tím.
Netuším co myslíš cpaním do txt.
np.where(a==hodnota)
V Pythonu jde s re.X psát víceřádkové rexegy s komentářema, tak jak to má. Re.findall vrací obsah všech skupin ať jsou kdekoliv. r před stringem znamená raw-string a ruší speciální význam zpětného lomítka. P: jsou tam jako běžné znaky. Přesně to co chce může dostat drobnou úpravou.
r'(\w+)\b(?!\()|(\w+)\(P: (\w+)\)'
Je to jedním výrazem, jen jsem napsal dvě možnosti.
Jak to myslíš? Je to jedním výrazem, jen jsem napsal dvě možnosti.
Nevím, jestli se dá dosáhnout přesně toho výsledku, který jsi chtěl, ale toto mi přijde použitelné.
>>> s = "clovek(P: mozog) clovek"
>>> re.findall(r'(\w+)(\(P: (\w+)\))?', s)
[('clovek', '(P: mozog)', 'mozog'), ('clovek', '', '')]
>>> re.findall(r'(\w+)\(P: (\w+)\)|(\w+)', s)
[('clovek', 'mozog', ''), ('', '', 'clovek')]
S obsahem souboru manipuluješ jen pokud máš v postu očekávaná data. Pokud na tu stránku přistoupíš normálně (klepni v adresním řádku na enter), tak tam post nebude. Pokud použiješ funkci pro znovunačtení stránky, tak se může opakovat i původní post.
Dá se to vyřešit přesměrováním na další (stejnou) stránku, které proběhne getem.
if (post) {
smazat
header('Location: ' . $_SERVER['REQUEST_URI']);
exit;
}
Dejme tomu, že to jednotlivě nějak funguje. Když to pak spojíš tak asi dost vadí ten delay(300000);
Proč děláš přechod na stránku, která se hned vrací ne předchozí? Udělej to v jednom skriptu.
Data se předávají vždycky stejně. Dáš je někam, kde si jich příjmence může všimnout a vyzvednout.
Jako něco takového, že si tu hodnotu budeš někam ukládat, aby se ti neztratila?
Nakombinoval jsem pár věcí, co by se ti mohlo hodit. Snad ti to pomůže.
<?php
function parse($lines, $filter=[]) {
$parsed = [];
foreach ($lines as $line) {
$entry = explode(' ', $line, 3);
if (count($entry) != 3)
continue;
$entry = array('time' => trim($entry[0], '[]'),
'type' => trim($entry[1], '[]'),
'data' => $entry[2]);
if (!empty($filter) && !in_array($entry['type'], $filter))
continue;
switch ($entry['type']) {
case 'join':
if (preg_match('/^(.*) has joined the server \((\d+):(.*)\)$/', $entry['data'], $match))
$entry['join'] = array('nick' => $match[1], 'id' => $match[2], 'ip' => $match[3]);
break;
case 'chat':
if (preg_match('/^\[(.*)\]: (.*)$/', $entry['data'], $match))
$entry['chat'] = array('nick'=>$match[1], 'text'=>$match[2]);
break;
}
$parsed[] = $entry;
}
return $parsed;
}
$lines = file("log.txt", FILE_IGNORE_NEW_LINES);
$parsed = parse($lines, ['chat']);
print_r($parsed);
foreach ($parsed as $entry) {
echo "V {$entry['time']} {$entry['chat']['nick']} napsal: {$entry['chat']['text']}\n";
}
Array
(
[0] => Array
(
[time] => 13:15:46
[type] => chat
[data] => [HippeCZE]: ahoj jak se máč
[chat] => Array
(
[nick] => HippeCZE
[text] => ahoj jak se máč
)
)
)
V 13:15:46 HippeCZE napsal: ahoj jak se máč
No, nějaké pole se konvertuje na string. Já z toho nepoznám kde a které, ale abys měl ten image v postu i files (a tam jako pole), tak bys ve formu musel mít toto:
něco name="image"
file name="image[]"
A netuším, jestli PHP takovou funkčnost zaručuje, nebo dokumentuje a jak to funguje v různých verzích neliší. Možná máš v tom postu stejná data jako ve files, čili pole. Každopádně je to prasárna.
Jinak se prostě podívej na všechny proměnné, co v nich máš.
Neměl jsi v úmyslu spíš něco takového?
...<input type=hidden name=opravneni value=2>...
..."UPDATE `uzivatel` SET `Opravneni`= ? WHERE `Nick`= ?"
...bind_param("is", $_POST["opravneni"], $_POST["nick"]);
Běží to na Apache-Coyote a nastavuje JSESSIONID, takže je to pravděpodobně Java.
Jestli jde o lenost to psát, tak spousta editorů má možnost nahrazování ve výběru s použitím regexů, takže si ten kód můžeš vygenerovat.
$ sed -r 's/\s*(\S+)\s+(\S+);/s.\2 = read_\1\(\);/'
> uint8_t N;
> uint8_t M;
> uint16_t V1;
> uint16_t V2;
> uint16_t V3;
< s.N = read_uint8_t();
< s.M = read_uint8_t();
< s.V1 = read_uint16_t();
< s.V2 = read_uint16_t();
< s.V3 = read_uint16_t();
Funkcionální a objektové programování se nevylučuje. A typicky tazatel při srovnávacím dotazu nezná ani jedno.
Ale k věci. Zkoušel jsi v JavaScriptu dělat třídy? Tak teď to nebudeš muset dělat jako debil. Tečka.
#6 petrk.
Pokud znáš vlákna v Céčku, tak je znáš i kdekoliv jinde.
Pomalé z hlediska strojového času a prováděné systémem na pozadí, takže jiné vlákno má volný intepreter.
Napojit jde obousměrně. Do Céčka jde embednout Python a pro Python jde psát moduly v Céčku (nebo volat funkce z nativních knihoven).
Pokud používáš verzi, kde se id zadává jako string, tak tě rozsah intu v PHP netrápí.
Nicméně pořád to má být číslo. To v tvém stringu není.
To říká, že indexuješ doublem. Pokud to přičítání k nule byl pokus o konverzi na int, tak takhle to nejde, výsledek bude double. Prostě indexuj třeba intem.
A pak máš ještě špatně počet iterací cyklu a ten výpis.
double farsky[10] = {212,38.4,12,13,14,1.8,45,52,4,2};
double suma = 0.0;
for (int i = 0; i < 10; i++) {
suma += farsky[i];
}
cout << suma << endl;
Měníš list, který zrovna procházíš.
Když budeš procházet kopii a odmazávat z originálu, tak se ti procházení nerozbije.
Vlákna v Pythonu jsou použitelné jen pro pomalé I/O, jinak jsou na ... k ničemu. Jestli je chceš plně využít a pořádně pochopit, tak to zkus v Céčku.
Měníš list, který zrovna procházíš. Můžeš pro procházení použít kopii:
for thread in self.threads[:]:
thread.join()
self.threads.remove(thread)
Nebo v případě jako tento, ho úplně zrušit až po průchodu:
for thread in self.threads:
thread.join()
self.threads = []
Jiný problém nevidím.
Jasně, já ti to budu ještě ladit. To porovnání jsi nespravil, ale posral.
Před chvílí jsem na rootu viděl, jak jsi za 2 hodiny nic nevymyslel, takže nasrat.
x<=VEL
Jinak tam nic nevidím.
Souhlas, taková struktura je úplně na ... nic.
SELECT Min(A.produkt),
Count(A.produkt)
FROM tabulka A
JOIN tabulka B
WHERE (
A.produkt = B.produkt
OR A.produkt = B.variant
OR A.variant = B.produkt
OR (
A.variant <> 0
AND A.variant = B.variant))
AND A.produkt IN (2,4)
GROUP BY A.produkt;
Jestli chceš úplně změnit rozměry, tak tag img má atributy width a height. Tipl bych si, že getImgWidth něco takového nastavuje, tak to můžeš upravit.
Jestli jen chceš udělat klik hned po načtení, tak můžeš kód z onclick dát ještě do onload.
Parametry se předávájí hodnotou nebo odkazem.
Bez & se předávájí hodnotou. Při volání funkce se vytvoří dočasná kopie parametru a na konci funkce se zase zruší. Pokud funkce parametr mění, tak mění tu kopii, která se ztratí.
S & se předávájí odkazem. Funkce dostává odkaz na proměnnou a když ji mění, tak mění odkazovanou proměnnou.
void vypisPole(cekarna &vstup) {
for(int x = 0; x < VEL; x++) {
cout
<< "id: " << vstup[x].ID
<< ", jmeno: " << vstup[x].jmeno
<< ", pozadavek: " << vstup[x].pozadavek
<< ", vyrizeno: " << vstup[x].vyrizeno
<< endl;
}
}
hala[4].jmeno = "Aneta";
Pokud je to Tablet PC s Intel/AMD hardware a desktopovými Windows, takže jen fyzicky zmenšené PC, tak by to mělo jít.
Pokud je to klasický tablet s ARM procesorem a Windows Mobile, tak na tom fungují jen aplikace pro ně určené (přímo pro ně, nebo univerzální aplikace). Konkrétně mobilní verze Office je osekaná a zdá se, že makra nepodporuje.
class Seznam:
prvni = posledni = None
def pridej_vrchol(self, vrchol):
if not self.prvni:
self.prvni = self.posledni = vrchol
else:
self.posledni.next = vrchol
while self.posledni.next:
self.posledni = self.posledni.next
def pridej_data(self, data):
self.pridej_vrchol(Vrchol(data))
A co čekáš, že ti někdo nasype do hlavy? Do praxe to zapojíš praktikováním, tak prostě sedni a programuj.
http://programujte.com/forum/vlakno/32820-ake-derave-kody-mam-v-php-backend-pre-mikrokontroler/
Asi sis špatně vyložil to, že ti minule nikdo neodpověděl. Všechno je to s prominutím sračka a na prodávání to není.
A když tam máš tu třídu Zoznam, tak to přidávání a sledování posledního asi má být v ní.
# projdu prvky a najdu posledni
vrchol = prvni
while vrchol and vrchol.next:
vrchol = vrchol.next
posledni = vrchol
# projdu prvky a hodnoty znovu pridam do seznamu
vrchol, stop = prvni, posledni
while vrchol:
posledni.next = posledni = Vrchol(vrchol.data)
vrchol = vrchol.next if vrchol is not stop else None
Poradit s čím? Hodnoty, které v něm máš, do něj vložíš ještě jednou. Akorát ti tím ten seznam roste, tak před tím musíš zjistit, kolik hodnot v něm původně bylo, nebo které byla poslední, abys věděl kdy skončit.
int input;
while (scanf("%d", &input) == 1) {
add_counter(input);
if (getchar() != ' ')
break;
}
#4 David
int je datový typ. Ne způsob načítání. Možnosti jsou víceméně 2:
1. Použiješ funkci, která indikuje úpěšnost načtení. Pak bývá problém, že neplatná data zůstávají na vstupu, takže při detekci chyby je asi budeš chtít před opakováním načítání přeskočit (tj. načíst jinak, pravděpodobně všechno do konce řádku).
2. Načteš data jako text, takže ze vstupu se vždy něco vytáhne (pokud je co) a tento text potom zpracuješ. Funkce pro čtení ze standardního vstupu mívají alternativu pro čtení z textového řetězce.
Když ukážeš konkrétní kód, který ti nefunguje, tak půjde poradit, co se s tím dá dělat.
Nebylo by to lepší naopak? Když po čísle není mezera, tak bylo poslední?
Takhle jak to je, by to mělo fungovat. V tom "//pre zjednodušenie" asi bude nějaké kouzlo.
A když teda máš zkušenosti s Javou, tak proč v PHP děláš takové prasečiny? :D
Tohle je hnus, ale mělo by z toho být pochopitelné, co to dělá.
Místo generování náhodných čísel si dáš to čtení ze sériáku. Jen ještě bacha na to, že readline pravděpodobně vrací string, takže ho musíš ještě převést na celé číslo (cislo = int(text)).
from Tkinter import *
import Queue
import random
import threading
import time
root = Tk()
canvas_width = 400
canvas_height = 400
image_list = [PhotoImage(file="zastinena%d.gif" % i) for i in range(256)]
label = Label(root, text="Stav senzoru")
label.pack(pady=10)
canvas = Canvas(root, width=canvas_width, height=canvas_height, bg="gray")
canvas.pack()
image_id = canvas.create_image(canvas_width / 2, canvas_height / 2)
queue = Queue.Queue()
def update_image():
while not queue.empty():
item = queue.get()
canvas.itemconfig(image_id, image=image_list[item])
root.after(100, update_image)
def thread_func():
while True:
time.sleep(1)
item = random.randrange(len(image_list))
queue.put(item)
thread = threading.Thread(target=thread_func)
thread.daemon = True
thread.start()
update_image()
root.mainloop()
Ty obrázky můžeš mít v listu a načítat je v cyklu. Nepotřebuješ na to hafo samostatných proměnných.
create_image vytvoří na canvasu objekt, který zobrazuje ten obrázek. Stačí vytvořit jeden a měnit mu obrázek.
Fungování TkInteru probíhá v mainloop. Když před tím máš nekončící cyklus, tak na mainloop nedojde.
TkInter (stejně jako většina GUI) funguje na principu postupného zpracovávání událostí (v mainloop), takže blokující operace blokne všechno. Můžeš třeba to čtení dělat v samostatném vlákně a data vkládat do fronty, kterou budeš v hlavním vlákně periodicky vybírat.
Pointa je v tom, že přidáváš všechny položky a jen podle podmínky měníš ssid_Final. Přidej jen ty, které tam chceš. Na konkrétním řešení nesejde.
List<Element> matching = new ArrayList<>();
for (ScanResult sr : this.wifiList)
{
if (sr.SSID.startsWith("AP_test"))
matching.add(new Element(sr.SSID));
}
this.nets = matching.toArray(new Element[matching.size()]);
Řádky souboru můžeš načíst pomocí BufferedReaderu. Pro implementaci Item asi bude lepší samostatná třída. Položky (instance té třídy) pak můžeš držet třeba v nějakém Listu (konkrétně třeba ArrayList), který jde i libovolně seřadit. Viz odkazy.
S PHP si hlavu nelam, když je to Java.
Spojový seznam znamená, že prvky jsou navzájem propojené. V C typicky tak, že struktura obsahuje ukazatel na další prvek stejného typu. Takže seznam bude prakticky jen první položka a na další se dostaneš přes ten ukazatel v ní.
Udělej samostatně ty funkce pro vložení, smazání, změnu a vyhledání prvku seznamu a hoď je do samostatného souboru. Z mainu je pak volej podle volby z menu.
Zápis do souboru udělej jednodušší ať to pak jde i snadno načíst a přidej i to načtení. Zase podle volby z menu.
Tím bys měl splnit všechno. Kdyby ses zasekl, tak se klidně ptej dál.
Mezi hostingem a tvým localhostem není žádná vazba. Co je u tebe, je u tebe. Co je na serveru, je na serveru. Pokud u sebe vytvoříš/upravíš nějaké soubory, tak je pak zkopíruješ na server. To uděláš přes to FTP. Když to u tebe bude c:\mujwebik\wp\neco, tak na serveru asi www/wp/neco. Prostě zachováš strukturu.
Pokud ke změnám nemáš práva, tak to holt nepůjde.
Matice je dvourozměrné pole. Po zadání souřadnic zkontroluješ, jestli jsou v mezích pole a pozice je volná a po vložení značky zkontroluješ, jestli jsi vytvořil řadu. Je to jen operování s indexy pole.
int velikost = 10;
char[][] matice = new char[velikost][velikost];
for (int y = 0; y < velikost; y++)
for (int x = 0; x < velikost; x++)
matice[y][x] = '.';
matice[4][4] = 'X';
matice[5][5] = 'O';
for (int y = 0; y < velikost; y++) {
System.out.print("|");
for (int x = 0; x < velikost; x++)
System.out.print(matice[y][x]);
System.out.println("|");
}
Celkově je lepší všechny složitější struktury předávat jako referenci, aby se zbytečně nevytvářela kopie. A pokud ve funkci ten parametr nechceš měnit, tak ještě můžeš přidat 'const'.
A pokud zůstaneš u toho řešení s polem, tak ještě nezapomeň to staré vždycky ještě smazat (delete[])