LINUX.ORG.RU

Как работает умножение строки на целое?

 


0

1

Как эта хрень работает? Тут же буква на число умножается.

str = jSONObject.toString();
int i = 432412;
int i2 = 0;        
int i3 = i2 + 1;
i += str.charAt(i2) * i3;
★★★★★

Последнее исправление: steemandlinux (всего исправлений: 1)

если char совместим с целым, то его код рассматривается как число. и умножается. так видимо просто байт берут. если char там байт.

alysnix ★★★
()

обычно в python например такое умножению приводит к созданию новой строки в которой заданное число раз повторяется исходная. Про java не знаю.

Stremitelnyj
()
Ответ на: комментарий от steemandlinux

аналог там есть 100%. это стандартная функция для взятия символа из строки по индексу. ищи там в классе строка.

alysnix ★★★
()
Ответ на: комментарий от alysnix

Я еще не знаю как выглядит строковой джейсон в жабке, в гадюке например это словарь с одиночными кавычками и пробелом после двоеточия.

steemandlinux ★★★★★
() автор топика
Ответ на: комментарий от steemandlinux

А что ты там дрочить собрался?

str = jSONObject.toString();

Тут строка, хз что там у тебя, жсон какой-то видимо.

int i = 432412; int i2 = 0;
int i3 = i2 + 1;

i3 = 1

i += str.charAt(i2) * i3;

i = 432412 + str.charAt(0) * 1

По нулевому индексу наверняка ‘{’, если это валидный JSON. У него код 123. В итоге будет i = 432412 + 123 = 432535.

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

А как джейсон строкой выглядит?

В питоне например:

>>> i = {"i":"p"}
>>> str(i)
"{'i': 'p'}"

Либо может выглядеть как сырой json в зависимости от того будет выполнен loads или нет.

>>> json.dumps(i)
'{"i": "p"}'
steemandlinux ★★★★★
() автор топика
Последнее исправление: steemandlinux (всего исправлений: 3)
Ответ на: комментарий от steemandlinux

Насчёт пробелов точно не скажу, но выглядит как-то так: {"i":"p"}. Что такое {'i': 'p'} я не понял, это точно не JSON, в JSON разрешены только двойные кавычки.

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

Второе это json.loads() - json загруженный как словарь. Я хз toString делает словарь или тупо строку, вроде по логике должен строку сделать.

steemandlinux ★★★★★
() автор топика
Последнее исправление: steemandlinux (всего исправлений: 1)
Ответ на: комментарий от steemandlinux

в пузане у некоторых обьектов магический метод __str__ один и тот же с __repr__

а в задачу repr входит вот что: eval(repr(obj)) == obj

а т.к. пузану пофигу на формат кавычек для выражений, если соблюдены вложенности. поэтому str выдал двойные снаружи и одиночные внутри. (т.к. двойные чутка предпочтительнее). поэтому пример с созданием словаря заработал.

а жсону не пофиг на виды ковычек

n_play
()
Ответ на: комментарий от Legioner

Спасибо большое, значения совпали, действительно json там чистый в виде строки:

i += ord(string_list[i2]) * i3

steemandlinux ★★★★★
() автор топика
Последнее исправление: steemandlinux (всего исправлений: 1)
Ответ на: комментарий от n_play

Я думал нет ли какого-нибудь сахарка, делающего в toString функцией джейсон объекта, а не простой встроенной функции преобразования в строку.

steemandlinux ★★★★★
() автор топика

Как эта хрень работает?

Хз. В целом херня какая-то. Откуда взял?

crutch_master ★★★★★
()
Ответ на: комментарий от Virtuos86

У нас в одном проекте на PHP, ВСЕ свойства были исключительно магическими. И автоматически сохранялись в SQL базу данных, как только кто-то пытался записать новое свойство.

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

Это зачем такое? Чтобы новые работники не могли сломать всё написанное и отлаженное непосильным трудом?

Virtuos86 ★★★★★
()
Ответ на: комментарий от steemandlinux

(char) 49 это символ с кодом 49, т.е. ‘1’

(char) (((char) (c + 1)) + 1) это прибавляется единица два раза, т.е. символ с кодом 51, ‘3’.

Legioner ★★★★★
()

Там не строка умножается на целое int, а char.

tyamur ★★
()
Ответ на: комментарий от steemandlinux

А почему нельзя было написать просто char c = ‘1’?

Не знаю, почему, спроси у автора этого кода. Похоже на какую-то обфускацию. А так - можно так написать.

Legioner ★★★★★
()
Ответ на: комментарий от steemandlinux

В джаве же вроде и «2» * 2 будет работать. Именно от нее javascript научился плохому: при у выполнении математических операций приводить к числам

tz4678 ★★
()
Ответ на: комментарий от tz4678

Что? Проверить это занимает ровно 5 секунд:

=> jshell
|  Welcome to JShell -- Version 11.0.5
|  For an introduction type: /help intro

jshell> "2" * 2
|  Error:
|  bad operand types for binary operator '*'
|    first type:  java.lang.String
|    second type: int
|  "2" * 2
|  ^-----^

Зачем постить что попало?

cdshines ★★★★★
()
Последнее исправление: cdshines (всего исправлений: 2)
Ответ на: комментарий от cdshines
/* package whatever; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;

/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
	public static void main (String[] args) throws java.lang.Exception
	{
		System.out.println("Answer is " + 41);
	}
}

Зато конкатенация работает

tz4678 ★★
()
Ответ на: комментарий от steemandlinux

Это REPL, нет.

Если очень нужно, попробуй https://github.com/igor-petruk/scriptisto, правда, я не знаю, зачем. У любого другого jvm-языка есть скрипт-режим (scala просто берешь и запускаешь, kotlin вот https://github.com/Kotlin/KEEP/blob/master/proposals/scripting-support.md, groovy тоже просто берешь и запускаешь и т.д.).

cdshines ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.